我试过以下几种方法,但没有成功:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
发布于 2016-09-30 06:44:49
在PostgreSQL中,当添加一个字段时,它会被添加到表的末尾。如果我们需要插入到特定位置,那么
alter table tablename rename to oldtable;
create table tablename (column defs go here); ### with all the constraints
insert into tablename (col1, col2, col3) select col1, col2, col3 from oldtable;
发布于 2015-12-22 16:56:37
一种方法是首先转储包含数据的整个数据库,然后只转储模式(pg_dump -s databasename > databasename_schema.sql
),尽管这是一种在绝对必须更改列顺序且使用外键时重新排列列的笨拙选择。接下来,编辑模式文件以根据需要重新排列列,然后从模式重新创建数据库,最后将数据恢复到新创建的数据库中。
发布于 2019-08-16 14:10:57
我使用Django,如果你不想头疼的话,它需要每个表中的id列。不幸的是,我太粗心了,我的表bp.geo_location_vague没有包含这个字段。我签了个小把戏。步骤1:
CREATE VIEW bp.geo_location_vague_vw AS
SELECT
a.id, -- I change order of id column here.
a.in_date,
etc
FROM bp.geo_location_vague a
第二步:(没有create table - table将自动创建!)
SELECT * into bp.geo_location_vague_cp2 FROM bp.geo_location_vague_vw
第3步:
CREATE SEQUENCE bp.tbl_tbl_id_seq;
ALTER TABLE bp.geo_location_vague_cp2 ALTER COLUMN id SET DEFAULT nextval('tbl_tbl_id_seq');
ALTER SEQUENCE bp.tbl_tbl_id_seq OWNED BY bp.geo_location_vague_cp2.id;
SELECT setval('tbl_tbl_id_seq', COALESCE(max(id), 0)) FROM bp.geo_location_vague_cp2;
因为我需要表中有双序列伪类型。在SELECT * into之后,pg将创建bigint类型insetad bigserial。
步骤4:现在我们可以删除视图,删除源表,并用旧名称重命名新表。该技巧已成功结束。
https://stackoverflow.com/questions/285733
复制相似问题