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