Postgresql中的id列位置是否重要?

时间:2018-04-15 15:56:22

标签: sql postgresql primary-key

我正在测试删除主键列ID的迁移(我想使用外键作为主键)。当我运行并恢复迁移时,我看到我的表的状态是相同的,除了id列现在是最后一个。

它会以任何方式更改我的数据库的行为吗?我是否应该在迁移还原代码中恢复列顺序?

1 个答案:

答案 0 :(得分:1)

从理论上讲,一切都应该没问题,但总会出现代码失败的情况。

例如:

a)blind insert

SELECT *
FROM tab
ORDER BY 1;
  

盲插件是指INSERT查询未指定哪些列接收插入的数据。

     

为什么这是件坏事?

     

因为数据库架构可能会更改。列可以移动,重命名,   添加或删除。当他们是,至少三件事之一   发生:

     
      
  1. 查询失败。这是最好的情况。有人从目标表中删除了一列,现在没有足够的列   插入进入,或有人更改数据类型和插入   类型不兼容,等等。但至少你的数据没有得到   已损坏,你甚至可能知道因为一个问题而存在   错误信息。

  2.   
  3. 查询继续有效,没有错。这是一个中等最坏情况。你的数据不是腐败的,而是怪物   仍然躲在床下。

  4.   
  5. 查询继续有效,但现在某些数据正在某个不属于的地方插入。您的数据已损坏。
  6.   

b)ORDER BY oridinal

i++;