Tenho uma tabela assim para salvar o catálogo de 90 serviços:
-------------------------------------------------------------------------------------
| 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
-------------------------------------------------------------------------------------
Preciso alterar a estrutura da tabela para ter os três níveis (serviço, subserviço e descrição) na mesma coluna com id próprio e apontando para uma nova coluna com o número do nível. Ou seja, algo assim (observe que os id's são algo que eu inventei):
-------------------------------------------------------------------------------------
| id | description | parent_id | cost
-------------------------------------------------------------------------------------
| 1 | Tests | NULL | 0.00
| 2 | Tests | 1 | 0.00
| 2044 | Calcium | 2 | 50.00
-------------------------------------------------------------------------------------
Estou trabalhando no Postgresql 12. Criei a nova coluna parent_id e estava tentando fazer esta sequência:
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')
Alguém pode por favor dar uma idéia aproximada de como transformar a estrutura da tabela?
É um pouco longo, então os passos são:
DEMO
A explicação da consulta acima é demonstrada neste violino
NOTA: Antes de executar a consulta, certifique-se de que o valor do contador não cruzará o ID já existente. Se as linhas recém-inseridas tiverem mais do que a contagem mínima existente, defina o início da sequência
max(id)+1
antes de executar esta consulta.