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?
sql
postgresql
Alex S
la source
la source
CREATE TABLE new (like old, extra_column text);
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:
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.
la source
including constraints
ne fonctionne pas sur PostgreSQL 8.3Pour 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
la source
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.
la source
Que diriez-vous
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)
réponse postgresql.org
la source