我有一个这样的表来保存 90 个服务的目录:
-------------------------------------------------------------------------------------
| id | service | subservice | description | cost
-------------------------------------------------------------------------------------
| 2044 | Tests | Tests | Calcium | 50.00
| 1385 | Cardiology | Cardioversion | Electric Cardioversion programmed| 200.00
| 7000 | Cardiology | Ecocardiography| Chest Ultrasound | 100.00
-------------------------------------------------------------------------------------
我需要更改表结构,以使三个级别(服务、子服务和描述)在同一列中具有自己的 id 并指向具有级别编号的新列。即类似这样的东西(请注意,id是我编造的):
-------------------------------------------------------------------------------------
| id | description | parent_id | cost
-------------------------------------------------------------------------------------
| 1 | Tests | NULL | 0.00
| 2 | Tests | 1 | 0.00
| 2044 | Calcium | 2 | 50.00
-------------------------------------------------------------------------------------
我正在使用 Postgresql 12。我已经创建了新列 parent_id 并且我正在尝试执行以下操作:
CREATE SEQUENCE seq_parent_id INCREMENT BY 1 START WITH 1 NO CYCLE;
ALTER TABLE catalog
ALTER COLUMN parent_id SET DEFAULT nextval('seq_parent_id')
任何人都可以大致了解如何转换表格的结构吗?
它有点冗长,所以步骤是:
演示
上述查询的解释在这个小提琴中演示
注意:在运行查询之前,请确保计数器值不会跨越已经存在的 ID。如果新插入的行数大于现有的最小计数,则
max(id)+1
在运行此查询之前设置序列的开始。