Bir tablonun yapısını veriler olmadan, tüm anahtarlar ve kısıtlamalar dahil olmak üzere yeni bir tabloya kopyalamanın bir yolu var mı?
Yanıtlar:
Basit bir şema kopyası için like deyimini kullanın.
CREATE TABLE new_table_name ( like old_table_name including all)
Peki, SQL ile alabileceğiniz en yakın şey:
create table new (
like old
including defaults
including constraints
including indexes
);
Ama her şeyi kopyalamayacak. Eksik olan en önemli şeyler YABANCI ANAHTARLAR'dır. Ayrıca - tetikleyiciler de kopyalanmaz. Diğer şeylerden emin değilim.
Başka bir yol da tablo yapısını dökmek, dökümde adını değiştirmek ve tekrar yüklemektir:
pg_dump -s -t old databases | sed 's/old/new/g' | psql
Ancak, bu tür basit sed'in başka yerlerde de eskiyi yeniye değiştireceğine dikkat edin (örneğin, tablo sütununuzda "is_scolded" adlı sütun varsa, "is_scnewed" haline gelecektir).
Asıl soru daha çok şudur: neden buna ihtiyacınız var - çünkü çeşitli amaçlar için farklı teknikler kullanırdım.
including constraintsPostgreSQL 8.3
İstediğinizi yapmanın açık ara en kolay yolu olan pgAdmin'e bir göz atın .
Tabloya sağ tıklayın, Komut Dosyaları - Oluşturun.
Ne dersin
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)
CREATE TABLE new (like old, extra_column text);