Belirli tablolar ve girdiler için bir veritabanı dökümü oluşturma Postgres


94

Yüzlerce tablo içeren bir veritabanım var, yapmam gereken, belirtilen tabloları dışa aktarmak ve veriler için ifadeleri bir sql dosyasına eklemek.

Bunu başarabileceğimi bildiğim tek ifade

pg_dump -D -a -t zones_seq interway > /tmp/zones_seq.sql

Bu ifadeyi her tablo için çalıştırmalı mıyım yoksa seçilen tüm tabloları tek bir büyük sql büyüklüğe aktarmak için benzer bir ifade çalıştırmanın bir yolu var mı? Yukarıdaki pg_dump yalnızca tablo şemasını dışa aktarmıyor, ikisine de ihtiyacım var

Herhangi bir yardım takdir edilecektir.

Yanıtlar:


160

Doğrudan kılavuzdan : " Birden çok -t anahtarı yazarak birden çok tablo seçilebilir "

Yani tüm tablolarınızı listelemeniz gerekiyor

pg_dump --column-inserts -a -t zones_seq -t interway -t table_3 ... > /tmp/zones_seq.sql  

Aynı öneke (veya sonek) sahip birkaç tablonuz varsa, bunları -tparametreyle seçmek için joker karakterleri de kullanabileceğinizi unutmayın :

" Ayrıca tablo parametresi, psql'nin \ d komutları tarafından kullanılan aynı kurallara göre bir model olarak yorumlanır "


20
-T anahtarı aynı yöntemdir ancak tabloları hariç tutmak için kullanılır. Bir veya iki masa vb
Scott Marlowe

4
-DSeçenek itibaren PG 9.1 kayboldu görünüyor
EPIGENE

5
-DSeçenek oldu 8.4 sürümü çıkarıldı . Onun --column-insertsyerine şimdi kullanmalısın.
mlovic

1
Pg_dump --host 127.0.0.1 --port 5432 --username "<username>" --column-inserts --verbose --file "/ tmp / <filename.sql>" --table "^ <regex> * "" <tablename> "
Tharindu Jayasuriya

22

Bu belirli tablolar belirli bir normal ifadeyle eşleşirse, pg_dump'ta -t içinde normal ifade seçeneğini kullanabilirsiniz.

pg_dump -D -a -t zones_seq -t interway -t "<regex>" -f /tmp/zones_seq.sql <DBNAME>

Örneğin, "test" ile başlayan tabloların dökümünü almak için,

pg_dump -D -a -t zones_seq -t interway -t "^test*" -f /tmp/zones_seq.sql <DBNAME>

3
bir normal ifade olsaydı, ^test.*yerine olması gerekmez miydi ^test*?
msrd0

5
Bu bir normal ifade değil, postgres'in "kalıplarını" kullanıyor, bu yüzden gerçekten şöyle olmalı "test*": postgresql.org/docs/current/app-psql.html#APP-PSQL-PATTERNS
elliotcm

Normal ifade kullanmak önemsiz değil, geçersiz normal ifade üretiyor : nicelik belirteci işlenen geçersiz hata. Ancak normal ifade doğrudur ... Yalnızca çok basit normal ifadeler geçerlidir
Peter Krauss
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.