在PostgreSQL表中更改列顺序时如何保持串行完整性?

问题描述

我知道没有正式方法可以改变Postgresql中列的位置,所以我的计划是遵循以下步骤:

@H_502_2@ALTER TABLE Foo RENAME TO FooOld; CREATE TABLE IF NOT EXISTS Foo (Col1 dtype1 col2 dtype2 ....); INSERT INTO Foo (Col1,Col2,Col3) (SELECT col1,col2,col3 FROM FooOld);

我遇到的问题是验证结果。特别是,该表具有序列号,数据的完整性取决于序列号。我一直在考虑这个问题,可能需要对两个表进行计数并进行比较,然后对表之间的所有列进行内部联接并对该联接进行计数?如果countold = countnew = countjoined,那将是一种验证形式。

我也可以将其作为与后端代码集成的任务来执行此操作,因此最好在sql外部进行验证(只有在确认两个表中的数据相同之后,才会删除旧表),但是我我有点担心搞砸这个系列。

对于某些背景:这是一个个人信息的生产表,我们添加了一些字段,然后有一些用于文本向量化的转换列,我们决定添加更多个人信息字段:

之前:

@H_502_2@Serial,FirstName,LastName,dob,vector1,vector2

当前:

@H_502_2@Serial,vector2,Gender,SSN

预期:

@H_502_2@Serial,SSN,vector2

但是具有更多字段。由于未公开的原因,我们需要更改基础架构,而不能仅更改select语句中的顺序。

解决方法

我遇到的问题是验证结果。特别是,此表具有序列号,数据的完整性取决于序列号。

然后,您必须像复制所有其他列一样复制序列列。然后,在后备序列上使用setval将其设置为高于表中的最大值。

但是,正如Belayer所说,整个练习毫无意义。