写在前面

最近实习了,公司产品用的人大金仓,底层数据库是Postgresql。
然后最近在建表,习惯了navicate,用这个一脸懵逼。
而且因为需要设置主键自增,在可视化操作那里无法单独添加,很奇怪,会疯狂报错。
我观察了其他大佬建的表,都是有一个nextval…啥的,谷歌了一波之后发现这是Postgresql的东西。
所以得手动写sql,别人推荐的是加一个关键字就可以了,但是我的一直不可以,所以这个教程先记录一下手动建立序列的方法。

教程

第一步 创建序列

1
2
3
4
5
CREATE SEQUENCE 模式.table_name_id_seq; 

-- 查询
select nextval('模式.table_name_id_seq'::regclass);

第二步 创建表

1
2
3
4
5
CREATE TABLE 模式.sys_oper_sql_log (
id BIGINT PRIMARY KEY DEFAULT nextval('trs_cloud.sys_oper_sql_log_id_seq'::regclass),
sql_content TEXT ,
oper_id BIGINT
);

方式二

可以直接使用serial关键词来设定,默认id类型是integer,需要手动调整为bigint或者其他

1
2
3
4
5
6
7
8
9
CREATE TABLE trs_cloud.lm_book_place (
id serial PRIMARY KEY ,
book_location varchar(50) ,
is_refuse_lend char default '0'::bpchar,
create_by varchar(60),
create_time timestamp without time zone,
update_by varchar(60),
update_time timestamp without time zone
);

注意

人大金仓不像Navicate一样,可视化插入,会提示报错,
可能原因是他要先select那个nextval,然后可视化插入会提前先自检不能为空
所以用insert into

实测可以用Navicate连接,操作虽然跟Mysql的不同,但是至少比人大金仓好太多,人大总是有奇奇怪怪的bug。

借鉴