在MySQL数据库里,在添加字段时可以添加到表的任意位置, 那么在POSTGRESQL里我们是否可以实现呢?
答案是肯定可以的。
PG的语法里并没有类似AFTER, BEFORE的子句。
总结:
第一种方法失败,甚至能导致数据库自动重启。
第二种方法可行,但如果数据量较大,业务停止的时间就会加长。
哪果数据量较小,可以考虑第二种方法。但如果数据量大,停机就没有办法接受了, 可以让业务修改代码来完成需求了。
尝试方法一:
修改pg_attribute中的表字段位置:
postgres=# create table t_col(id int4, name varchar(9)); CREATE TABLE ^ postgres=# insert into t_col values(1,'a'); INSERT 0 1 postgres=# insert into t_col values(2,'b'); INSERT 0 1 postgres=# select attrelid,attname,attnum from pg_attribute where attrelid = (select relfilenode from pg_class where relname = 't_col'); attrelid | attname | attnum ----------+----------+-------- 353681 | tableoid | -7 353681 | cmax | -6 353681 | xmax | -5 353681 | cmin | -4 353681 | xmin | -3 353681 | ctid | -1 353681 | id | 1 353681 | name | 2 (8 row