Tentei o seguinte, mas não tive sucesso:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
sql
database
postgresql
alter-table
Huuuze
fonte
fonte
Respostas:
" Alterar a posição da coluna " no PostgreSQL Wiki diz:
Isso é muito fraco, mas em sua defesa, no SQL padrão, também não há solução para reposicionar uma coluna. As marcas de banco de dados que oferecem suporte à alteração da posição ordinal de uma coluna estão definindo uma extensão para a sintaxe SQL.
Outra ideia me ocorre: você pode definir um
VIEW
que especifica a ordem das colunas como você gosta, sem alterar a posição física da coluna na tabela base.fonte
No PostgreSQL, ao adicionar um campo, ele seria adicionado no final da tabela. Se precisarmos inserir em uma posição particular, então
fonte
Este post é antigo e provavelmente está resolvido, mas eu tive o mesmo problema. Resolvi isso criando uma visão da tabela original especificando a nova ordem das colunas.
A partir daqui, eu poderia usar a visualização ou criar uma nova tabela a partir da visualização.
Renomeie ou elimine a tabela original e defina o nome da nova tabela para a tabela antiga.
fonte
Uma, embora seja uma opção desajeitada para reorganizar as colunas quando a ordem das colunas deve ser absolutamente alterada e as chaves estrangeiras estão em uso, é primeiro despejar todo o banco de dados com dados e, em seguida, despejar apenas o esquema (
pg_dump -s databasename > databasename_schema.sql
). Em seguida, edite o arquivo de esquema para reorganizar as colunas como desejar, recrie o banco de dados do esquema e, finalmente, restaure os dados no banco de dados recém-criado.fonte
Não acho que você possa no momento: veja este artigo na wiki do Postgresql .
As três soluções alternativas deste artigo são:
fonte
Abra a tabela no PGAdmin e no painel SQL na parte inferior copie a instrução SQL Create Table. Em seguida, abra a ferramenta de consulta e cole. Se a tabela tiver dados, altere o nome da tabela para 'novo_nome', caso contrário, exclua o comentário "-" na linha Eliminar Tabela. Edite a sequência da coluna conforme necessário. Cuidado com a vírgula ausente / supérflua na última coluna, caso você a tenha movido. Execute o novo comando SQL Create Table. Atualize e ... voilà.
Para tabelas vazias na fase de design, este método é bastante prático.
Caso a tabela contenha dados, precisamos reorganizar a sequência das colunas dos dados também. Isso é fácil: use
INSERT
para importar a tabela antiga para sua nova versão com:... onde
c2
,c3
,c1
são as colunasc1
,c2
,c3
da antiga mesa em suas novas posições. Observe que, neste caso, você deve usar um nome 'novo' para a tabela 'antiga' editada ou perderá seus dados . No caso dos nomes das colunas serem muitos, longos e / ou complexos, use o mesmo método acima para copiar a nova estrutura da tabela em um editor de texto e crie a nova lista de colunas antes de copiá-la para aINSERT
instrução.Depois de verificar se está tudo bem,
DROP
vá para a tabela antiga e mude o nome 'novo' para 'antigo' usandoALTER TABLE new RENAME TO old;
e pronto.fonte
Eu estava trabalhando para reordenar várias tabelas e não queria ter que escrever as mesmas consultas repetidamente, então fiz um script para fazer tudo para mim. Essencialmente, ele:
pg_dump
pg_dump
consulta original para criar uma tabela reordenada com dadosEle pode ser usado executando o seguinte comando simples:
Ele imprime o sql para que você possa verificá-lo e testá-lo, esse foi um grande motivo pelo qual eu o baseei
pg_dump
. Você pode encontrar o repositório github aqui .fonte
Eu uso Django e requer coluna id em cada tabela se você não quiser ter dor de cabeça. Infelizmente, fui descuidado e minha tabela bp.geo_location_vague não continha este campo. Eu iniciei um pequeno truque. Passo 1:
Etapa 2: (sem criar tabela - a tabela será criada automaticamente!)
Etapa 3:
Porque preciso ter um grande pseudótipo serial na tabela. Depois de SELECT * na pg, será criado o tipo bigint insetad bigserial.
passo 4: agora podemos eliminar a visão, eliminar a tabela de origem e renomear a nova tabela com o nome antigo. O truque foi encerrado com sucesso.
fonte
Existem algumas soluções alternativas para tornar isso possível:
Recriando a mesa inteira
Crie novas colunas na tabela atual
Crie uma vista
https://tableplus.com/blog/2018/09/postgresql-is-it-possible-to-alter-column-order-position-in-a-table.html
fonte