2009-08-03 35 views

cevap

10

pgAdmin'a bir göz atın - ne istediğinizi yapmanın en kolay yolu.
Tabloya sağ tıklayın, Komut Dosyaları - Oluştur.

create table new (
    like old 
    including defaults 
    including constraints 
    including indexes 
); 

Ama hergün kopyalamak olmaz:

+0

Sadece phpPgAdmin erişemeyecek Sunucu bende değil. –

+0

Yeterince adil. PhpPgAdmin'de: tabloya gidin, Dışa Aktar'ı tıklatın, "Yapı Sadece" yi seçin ve komut dosyanızın var – ChssPly76

+0

Eminim bu yüklemede bir hata olması gerekir - bunu yaptığımda doğru çerçevede sadece boş bir sayfa gösteriliyor :/ –

40

Eh, SQL ile alabilirsiniz yakın olduğunu. Eksik olan en önemli şeyler YABANCI tuşlardır. Ayrıca - tetikleyiciler de kopyalanmaz. Başka şeyler hakkında emin değilim.

başka yolu da, masa yapısını dökümü o çöplükte isim değiştirmek ve yeniden yüklemek için:

pg_dump -s -t old databases | sed 's/old/new/g' | psql 

Ancak dikkat bu örneğin (ayrıca diğer yerlerde eskiden yeniye değişecek sed basit "is_scolded" isimli sütununda varsa "is_scnewed" olur.

Asıl soru şudur: neden buna ihtiyacınız var - çünkü farklı amaçlar için farklı teknikler kullanırdım.

+0

Not: 'kısıtlamalar dahil' PostgreSQL 8.3 üzerinde çalışmaz – Ragnar123

+1

Postgres 9.3'te bir çekicilik gibi çalışmış :) – Ganapathy

+7

En iyi cevap. Sadece bir "seri" değeri veya bir diziye varsayılan başka bir sütun varsa, eski tablo ile aynı diziyi kullanacağını unutmayın! Bu nedenle, her iki tablonun içine bir şeyler eklerseniz, her ikisi için de artar. – sudo

23

Basit bir şema kopyası için benzer bir deyim kullanın.

CREATE TABLE new_table_name (like old_table_name including all) 
5

Nasıl

hakkında
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2) 

postgresql.org answer

+1

Maalesef, bu anahtarlar, kısıtlamalar veya varsayılan değerleri korumaz. – sudo

+1

'WHERE 1 = 2' ifadesini ifade etmenin daha iyi bir yolu 'WHERE false' ya da WHERE deyimi olmamakla birlikte 'LIMIT 0' olacaktır. –

İlgili konular