pgsql问题记录

关于PostgreSQL的大小写问题

  1. PostgreSQL对表名、字段名都是区分大小写的,但是,PostgreSQL在SQL语句中对大小写是不敏感的,在不加双引号的情况下,创建时无论使用大写还是小写,表中都会统一转为小写显示的,因此查询时也会将语句中的字段名统一改成小写,因此,此时使用大小写查询均可。
  2. 用SQL语句的时候需要加双引号,或者转义符号。如果要创建名称为大写字母的字段名,需加双引号,此时表中的字段名不含双引号,但是查询时需加上双引号,执行时语句中的双引号将被抹去,因此能查出对应字段。
  3. 查询执行时,只会发生字段”双引号被抹去“和“大写转小写”中其中一个,优先发生”双引号被抹去“。

创建表的语法:

serial 类型表示自增,在创建表时,会自动生成一个自增序列,通过维护这个序列,来指定主键自增。序列的命名规则为: 表名_主键_sql 如 test_table_id_seq

DROP TABLE IF EXISTS test_table; CREATE TABLE test_table ( id serial NOT NULL , name varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, CONSTRAINT "test_table_pkey" PRIMARY KEY ("id") ); COMMENT ON COLUMN test_table.id IS 'id'; COMMENT ON COLUMN test_table.name IS '名称';

创建序列:

CREATE SEQUENCE public.vuln_leakagebase_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;

设置序列所属用户:

ALTER TABLE public.vuln_leakagebase_id_seq OWNER TO root;

将序列应用到表字段:

ALTER SEQUENCE public.vuln_leakagebase_id_seq OWNED BY public.vuln_leakagebase.id;

创建索引:

CREATE INDEX idx_vuln_id ON public.vuln_leakagebase USING btree (vuln_id, vuln_name, vuln_type, severity);

重置序列起始值为1

alter sequence xxx_id_seq restart with 1

查看当前序列

SELECT nextval('xxx_id_seq ');

重置自增主键

TRUNCATE tableName RESTART IDENTITY;

主键自增的表,初始化数据的时候,如果指定了主键的值,需要将序列重新维护一下。

否则后续新增数据时,会报错主键冲突。

解决方法:

把表对应的序列也初始化一下。

select setval('test_table_id_seq', max(id)) from test_table;

启动数据库:(start、stop、status、restart)

su postgres -c "/topsa/serve/pgsql/bin/pg_ctl -D /topsa/serve/pgsql/data/ -l logfile start"

备份数据库:

切换到pgsql的bin目录下,备份root用户下的ngtopsa库

./pg_dump -U root -d ngtopsa > ngtopsa.sql;

备份指定表

./pg_dump -U root -d ngtopsa -t sys_user > sys_user.sql;

恢复sql文件

./psql -h [127.0.0.1] -U [postgres] -d [dbname] -f [dump.sql/*.dmp]

你可能感兴趣的:(数据库)