Como trocar a posição de coluna em uma tabela?
Gostaria de saber como trocar a posição de coluna em uma tabela ou, caso não seja possível, como adicioná-la em uma posição específica (por padrão ela sempre fica como a mais a direita). No MySQL basta usar o comando "After Nome_Coluna;", mas no Postgre não funciona. Ficarei muito grato com qualquer ajuda.
Daniel Hannemann
Curtidas 0
Respostas
Jair N.
19/03/2014
Bom Dia, "ter? Tem! Porém, é meio complicado... bem já fiz isso alguma vezes o problema é que não existe um processo automático para isso. Você deve estar se perguntando então como? Seguinte,..
Fiz uma "gambiarra para isso, poderia ter criado uma função etc e tal. Porém ainda não o fiz "preguiça" mas vou te passar o que tenho...
-- Selecionando a tabela...
SELECT pg_attribute.attnum
, pg_attribute.attname
FROM pg_attribute
INNER JOIN pg_type
ON (pg_type.typrelid = pg_attribute.attrelid)
WHERE (pg_type.typname = 'my_tabela') -- nome da tabela para pesquisa
AND (pg_attribute.attstattarget = -1)
-- Alterando o valor...
UPDATE pg_attribute
SET attnum = 5 -- quantidade de posições posteriores
FROM pg_type
WHERE (pg_type.typrelid = pg_attribute.attrelid)
AND (pg_type.typname = 'my_tabela') -- nome da tabela para pesquisa
AND (pg_attribute.attname = 'my_campo') -- nome do campo para pesquisa
AND (pg_attribute.attstattarget = -1)
Para o efeito desejado é melhor alterar todos os campos com uma seqüência posterior aquela que você quer ai depois nesse intervalo acrescentar o que você está querendo....
Qualquer dúvida pergunte... se eu tiver a resposta postarei...
Atc.
Fiz uma "gambiarra para isso, poderia ter criado uma função etc e tal. Porém ainda não o fiz "preguiça" mas vou te passar o que tenho...
-- Selecionando a tabela...
SELECT pg_attribute.attnum
, pg_attribute.attname
FROM pg_attribute
INNER JOIN pg_type
ON (pg_type.typrelid = pg_attribute.attrelid)
WHERE (pg_type.typname = 'my_tabela') -- nome da tabela para pesquisa
AND (pg_attribute.attstattarget = -1)
-- Alterando o valor...
UPDATE pg_attribute
SET attnum = 5 -- quantidade de posições posteriores
FROM pg_type
WHERE (pg_type.typrelid = pg_attribute.attrelid)
AND (pg_type.typname = 'my_tabela') -- nome da tabela para pesquisa
AND (pg_attribute.attname = 'my_campo') -- nome do campo para pesquisa
AND (pg_attribute.attstattarget = -1)
Para o efeito desejado é melhor alterar todos os campos com uma seqüência posterior aquela que você quer ai depois nesse intervalo acrescentar o que você está querendo....
Qualquer dúvida pergunte... se eu tiver a resposta postarei...
Atc.
GOSTEI 0
Ronaldo Lanhellas
19/03/2014
Não há uma forma automática, eu creio que a forma mais rápida é a seguinte:
1 - Crie uma tabela auxiliar, cópia da tabela original, apenas com a posição da coluna onde você deseja.
2 - Cria um INSERT Com SELECT da tabela original para a tabela auxiliar.
3 - Pronto, agora delete a original e mude o nome da auxiliar para a original.
1 - Crie uma tabela auxiliar, cópia da tabela original, apenas com a posição da coluna onde você deseja.
2 - Cria um INSERT Com SELECT da tabela original para a tabela auxiliar.
3 - Pronto, agora delete a original e mude o nome da auxiliar para a original.
GOSTEI 0
Daniel Hannemann
19/03/2014
Muito obrigado pelas respostas e pela atenção! Foram mt úteis!
Caso no futuro eu tenha alguma dúvida vou postar aqui sim ^^
Caso no futuro eu tenha alguma dúvida vou postar aqui sim ^^
GOSTEI 0
Ronaldo Lanhellas
19/03/2014
Fique a vontade, ajudaremos no que for possível.
GOSTEI 0