如何使用postgres在表中的第2列或第3列之后的表中添加新列?
我的代码如下所示
ALTER TABLE n_domains ADD COLUMN contract_nr int after owner_id
Run Code Online (Sandbox Code Playgroud)
Mil*_*dev 58
不,没有直接的方法可以做到这一点.并且有一个原因 - 每个查询都应该按照它需要的任何顺序(和格式等)列出它所需的所有字段,从而使得一个表中列的顺序无关紧要.
如果你真的需要这样做我可以想到一个解决方法:
pg_dump --schema-only --table=<schema.table> ...)<new_table>SELECT field1,field2 <default_for_new_field>,field3,... FROM <old_table>' 填充新表中包含旧表的数据;小智 27
列的顺序并不相关,将固定宽度列放在表格的前面可以优化数据的存储布局,它还可以使您的数据更容易在应用程序代码之外使用.
PostgreSQL不支持更改列排序(请参阅PostgreSQL wiki上的Alter列位置); 如果表格相对孤立,最好的办法是重新创建表格:
CREATE TABLE foobar_new ( ... );
INSERT INTO foobar_new SELECT ... FROM foobar;
DROP TABLE foobar CASCADE;
ALTER TABLE foobar_new RENAME TO foobar;
Run Code Online (Sandbox Code Playgroud)
如果您对表定义了大量视图或约束,则可以在新列之后重新添加所有列并删除原始列(有关示例,请参阅PostgreSQL wiki).
真正的问题是还没有完成。当前,PostgreSQL的逻辑顺序与物理顺序相同。这是有问题的,因为您无法获得不同的逻辑顺序,但是更糟糕的是,由于表并未物理上自动打包,因此通过移动列,您可以获得不同的性能特征。
仅仅出于设计目的而论证这种方式是没有意义的。提交可接受的补丁程序后,某些时候它可能会发生变化。
综上所述,依靠逻辑或物理列的顺序位置是个好主意吗?一定不行。在生产代码中,永远不要使用隐式排序或*。为什么要使代码变得比需要的更脆弱?正确性应始终比保存几次击键优先。
解决方法是,实际上您可以通过重新创建表或通过“添加并重新排序”游戏来修改列顺序
也可以看看,
| 归档时间: |
|
| 查看次数: |
70481 次 |
| 最近记录: |