首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更改PostgreSQL数据库表中列的位置?

如何更改PostgreSQL数据库表中列的位置?
EN

Stack Overflow用户
提问于 2008-11-12 23:05:34
回答 3查看 174.3K关注 0票数 157

我试过以下几种方法,但没有成功:

代码语言:javascript
运行
复制
ALTER TABLE person ALTER COLUMN dob POSITION 37;
EN

回答 3

Stack Overflow用户

发布于 2016-09-30 06:44:49

在PostgreSQL中,当添加一个字段时,它会被添加到表的末尾。如果我们需要插入到特定位置,那么

代码语言:javascript
运行
复制
    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;
票数 92
EN

Stack Overflow用户

发布于 2015-12-22 16:56:37

一种方法是首先转储包含数据的整个数据库,然后只转储模式(pg_dump -s databasename > databasename_schema.sql),尽管这是一种在绝对必须更改列顺序且使用外键时重新排列列的笨拙选择。接下来,编辑模式文件以根据需要重新排列列,然后从模式重新创建数据库,最后将数据恢复到新创建的数据库中。

票数 26
EN

Stack Overflow用户

发布于 2019-08-16 14:10:57

我使用Django,如果你不想头疼的话,它需要每个表中的id列。不幸的是,我太粗心了,我的表bp.geo_location_vague没有包含这个字段。我签了个小把戏。步骤1:

代码语言:javascript
运行
复制
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将自动创建!)

代码语言:javascript
运行
复制
SELECT * into bp.geo_location_vague_cp2 FROM bp.geo_location_vague_vw

第3步:

代码语言:javascript
运行
复制
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:现在我们可以删除视图,删除源表,并用旧名称重命名新表。该技巧已成功结束。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/285733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档