Estou tentando recriar a estrutura de uma tabela dentro de uma função usando algum SQL dinâmico.
EXECUTE 'CREATE TABLE ' || my_table_name || '_bk' ||
' (like ' || _my_table_name || ')';
Isso será semelhante a:
CREATE TABLE my_table_bk
(like my_table);
Mas eu preciso descartar todas as restrições. Usando EXCLUDING CONSTRAINTS
nas Like Options , ele ainda copia as restrições NOT NULL (a documentação confirma esse comportamento):
CREATE TABLE my_table_bk
(like my_table EXCLUDING CONSTRAINTS);
A questão é: como posso recriar a estrutura da tabela sem as restrições NOT NULL ou, em alternativa, remover todas as restrições NOT NULL em uma tabela?
Tente isto:
Ou você pode anexar
LIMIT 0
em vez daWHERE
cláusula.Isso criará uma tabela
my_table_bk
com a mesma estruturamy_table
sem restrições e sem dados.Isso foi perguntado no Stack Overflow em Como eliminar todas as restrições NOT NULL de uma tabela PostgreSQL de uma só vez . Parece dar uma boa gama de soluções.
A resposta aceita por Denis de Bernardy é:
Update: este método é melhor se você quiser duplicar a estrutura da tabela sem restrições
Eu acho que a maneira mais fácil de criar uma tabela como sem
NOT NULL
restrições, é usar um simplespg_dump
esed
Você pode expandir facilmente esse método para eliminar o restante das restrições. Esse termo é meio amplo, então não tenho certeza de quais restrições você não deseja.
Opções
As opções podem ser encontradas com
pg-dump --help
,