Huu*_*uze 101 sql database postgresql alter-table
我尝试了以下,但我没有成功:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
Run Code Online (Sandbox Code Playgroud)
Bil*_*win 97
PostgreSQL Wiki中的" 更改列位置 "说:
PostgreSQL目前根据表的
attnum列定义列顺序pg_attribute.更改列顺序的唯一方法是重新创建表,或者通过添加列和旋转数据,直到达到所需的布局.
这非常弱,但在他们的辩护中,在标准SQL中,也没有重新定位列的解决方案.支持更改列的序号位置的数据库品牌定义了SQL语法的扩展.
另一个想法发生在我身上:您可以定义一个VIEW指定列的顺序的方式,而不更改基表中列的物理位置.
Ken*_*Ken 26
这篇文章很老,可能已经解决,但我遇到了同样的问题.我通过创建指定新列顺序的原始表的视图来解决它.
从这里我可以使用视图或从视图中创建一个新表.
CREATE VIEW original_tab_vw AS
SELECT a.col1, a.col3, a.col4, a.col2
FROM original_tab a
WHERE a.col1 IS NOT NULL --or whatever
SELECT * INTO new_table FROM original_tab_vw
重命名或删除原始表,并将新表的名称设置为旧表.
Vil*_*lle 20
一个,虽然在必须绝对更改列顺序时重新排列列的笨拙选项,并且正在使用外键,但是首先使用数据转储整个数据库,然后仅转储schema(pg_dump -s databasename > databasename_schema.sql).接下来,编辑模式文件以根据需要重新排列列,然后从模式重新创建数据库,最后将数据还原到新创建的数据库中.
All*_*win 18
在PostgreSQL中,在添加字段时,它将添加到表的末尾.如果我们需要插入特定位置那么
alter table tablename rename to oldtable;
create table tablename (column defs go here);
insert into tablename (col1, col2, col3) select col1, col2, col3 from oldtable;
Run Code Online (Sandbox Code Playgroud)
小智 5
在PGAdmin中打开表,并在底部的SQL窗格中复制SQL Create Table语句.然后打开查询工具并粘贴.如果表有数据,请将表名更改为"new_name",否则,删除"删除表"行中的注释" - ".根据需要编辑列序列.记住最后一栏中丢失/多余的逗号,以防你移动它.执行新的SQL Create Table命令.刷新......瞧.
对于设计阶段的空表,这种方法非常实用.
如果表有数据,我们也需要重新排列数据的列序列.这很简单:用于INSERT将旧表导入其新版本:
INSERT INTO new ( c2, c3, c1 ) SELECT * from old;
Run Code Online (Sandbox Code Playgroud)
...其中c2,c3,c1是列c1,c2,c3旧表在其新职位.请注意,在这种情况下,您必须为已编辑的"旧"表使用"新"名称,否则您将丢失数据.如果列名称很多,则长和/或复杂使用与上面相同的方法将新表结构复制到文本编辑器中,并在将其复制到INSERT语句之前创建新列列表.
在检查DROP完所有之后,旧表并将"新"名称更改为"旧"使用ALTER TABLE new RENAME TO old;,您就完成了.
| 归档时间: |
|
| 查看次数: |
102717 次 |
| 最近记录: |