Existe-t-il un moyen de copier la structure d'une table dans une nouvelle table, sans données, y compris toutes les clés et contraintes?
Réponses:
Pour une simple copie de schéma, utilisez la clause like.
CREATE TABLE new_table_name ( like old_table_name including all)
Eh bien, le plus proche que vous pouvez obtenir avec SQL est:
create table new (
like old
including defaults
including constraints
including indexes
);
Mais il ne copiera pas tout. Les éléments les plus importants qui manquent sont les CLÉS ÉTRANGÈRES. De plus, les déclencheurs ne sont pas copiés. Je ne suis pas sûr d'autres choses.
Une autre façon est de vider la structure de la table, de changer son nom dans le vidage et de la charger à nouveau:
pg_dump -s -t old databases | sed 's/old/new/g' | psql
Mais attention, un sed aussi simpliste changera aussi l'ancien en nouveau dans d'autres endroits (par exemple si vous avez dans votre colonne de table nommée "is_scolded" il deviendra "is_scnewed").
La question est plutôt: pourquoi en avez-vous besoin - car à des fins diverses, j'utiliserais différentes techniques.
including constraints
ne fonctionne pas sur PostgreSQL 8.3
Pour copier complètement un tableau, la forme courte utilisant la commande TABLE peut également être utilisée:
CREATE TABLE films2 AS
TABLE films
WITH NO DATA;
Plus de détails ici
Jetez un œil à pgAdmin - de loin le moyen le plus simple de faire ce que vous voulez.
Cliquez avec le bouton droit sur la table, Scripts - Créer.
Que diriez-vous
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)
CREATE TABLE new (like old, extra_column text);