Existe uma maneira de copiar a estrutura de uma tabela em uma nova tabela, sem dados, incluindo todas as chaves e restrições?
sql
postgresql
Alex S
fonte
fonte
Respostas:
Para uma cópia de esquema simples, use a cláusula like.
CREATE TABLE new_table_name ( like old_table_name including all)
fonte
CREATE TABLE new (like old, extra_column text);
Bem, o mais próximo que você pode chegar com SQL é:
create table new ( like old including defaults including constraints including indexes );
Mas não vai copiar tudo. As coisas mais importantes que faltam são CHAVES ESTRANGEIRAS. Além disso, os gatilhos também não são copiados. Não tenho certeza sobre outras coisas.
Outra maneira é despejar a estrutura da tabela, alterar seu nome no despejo e carregá-la novamente:
Mas tome cuidado, pois esse sed simplista também mudará de antigo para novo em outros lugares (por exemplo, se você tiver na sua tabela a coluna chamada "is_scolded", ela se tornará "is_scnewed").
A questão realmente é: por que você precisa disso - porque, para vários fins, eu usaria técnicas diferentes.
fonte
including constraints
não funciona no PostgreSQL 8.3Para copiar uma tabela completamente, a forma abreviada usando o comando TABLE também pode ser usada:
CREATE TABLE films2 AS TABLE films WITH NO DATA;
Mais detalhes aqui
fonte
Dê uma olhada no pgAdmin - de longe a maneira mais fácil de fazer o que você deseja.
Clique com o botão direito na tabela, Scripts - Criar.
fonte
E se
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)
resposta postgresql.org
fonte