PostgreSQL-从MySQL到PostgreSQL一些习惯用法的解决方案

1. 主键自增:

PostgreSQL中是不能直接设置主键自增的,如果要设置主键自增是需要先新建一个序列:

1
2
3
4
5
6
CREATE SEQUENCE "public"."table_id_seq"
INCREMENT 1
START 1
MINVALUE 1
MAXVALUE 9223372036854775000
CACHE 1;

然后把自增主键id的默认值设为nextval(‘table_id_seq’::regclass)就可以了,不过有一点需要注意:如果有insert失败后,id也会加一,当失败回滚后此时id会出现不连续也就是断层。

2.更新数据update_time自动更新

在MySQL中我们可以使用 ON UPDATE CURRENT_TIMESTAMP 来实现当行更新后,update_time会自动更新,但是postgreSQL是没有这个操作的,为了实现这一效果我们使用了触发器,首先先建一个函数:

1
2
3
4
5
6
7
8
CREATE OR REPLACE FUNCTION update_modified_column()   
RETURNS TRIGGER AS $$
BEGIN
NEW.modified = now();
RETURN NEW;
END;
$$ language 'plpgsql';
//其中modified 为我们需要更新的字段,我们统一使用的是update_time

然后创建触发器:

1
2
3
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON table_name FOR EACH ROW EXECUTE PROCEDURE  update_modified_column();

//table_name 为需要自动更新的表

因为我们库里更新时间字段都为update_time所以我们就可以使用update_modified_column这个一个函数就可以了

目前就遇到这些不同,先更新这些,等遇到新的我再记录,有时间也要系统学下postgreSQL,也会整理的