Eu tenho várias tabelas, todas contendo atributos aid,bid,cid
e xid
do tipo integer, outros atributos podem diferir. Para cada tabela (dada) T
, gostaria de ordenar as linhas de acordo com a aid,bid,cid
coluna ascendente e atualizada xid
com valores incrementados começando com 0. Qual é a melhor maneira de conseguir isso?
Minha solução atual envolve:
- selecionando mesa
T
- abrindo um cursor sobre as tuplas ordenadas de uma tabela
- atribuir o valor de autoincremento a
xid
- inserindo a tupla em uma tabela temporal
T_temp
- excluindo todos os registros de
T
- inserindo todos os registros de
T_temp
dentroT
Como as tabelas têm esquemas diferentes, programei metade do código PL/pgSQL
e metade do código com script bash.
Questão 1: Algum comentário sobre como programá-lo em PL/pgSQL puro?
Pergunta 2: Algum comentário sobre como implementar isso de forma mais elegante?
Se bem entendi, você deseja reiniciar a numeração com 0 para cada tabela.
Use a função de janela
row_number()
em umUPDATE
:Usando
ctid
como substituto do pobre homem para uma chave primária, já que você se esqueceu de divulgar sua definição de tabela.SQL Fiddle.
db<>mexa aqui