Soru Postgresql üzerinde programlı olarak DDL oluştur


Postgresql'de bir tablonun DDL'sini programatik olarak nasıl oluşturabilirim? Bunu yapmak için bir sistem sorgusu veya komutu var mı? Sorun gidermek, işaretçi döndürmedi.


25
2017-12-10 23:10


Menşei




Cevaplar:


Pg_dump kullanarak bu komutla yapılabilir:

pg_dump -U user_name -h host database -s -t table_or_view_names -f table_or_view_names.sql

Açıklama:

-s or --schema-only : Dump only ddl / the object definitions (schema), without data.
-t or --table Dump :  Dump only tables (or views or sequences) matching table

Konu dışı özür dilerim. Sadece kimin "psql dump ddl" googling yardım etmek ve bu konuya yönlendirme olsun.


27
2018-02-14 03:18





Kullanabilirsiniz pg_dump veritabanının içeriğini (komut ve veri) dökmek için komut. --schema-only anahtar tablonuz (lar) için sadece DDL'yi boşaltacaktır.


18
2017-12-10 23:30



Üzgünüz, programlı olarak yapmalısınız. Çoğu insan pg_dump yüklü veya pg_dump ile bir sunucuya erişemezdi. - ruipacheco
Yorumunuzu tam anlamıyorum. pg_dump PostgreSQL ile yüklenir ve tüm sunucularda kullanılabilir. Kullanmak için özel kullanıcı ayrıcalıklarına gerek yoktur (normal PostgreSQL erişim denetimleri, döktüğünüz veritabanına uygulanır). Bunun programlı bir çözüm olduğunu düşünmüyorsanız, hangi programlama ortamını belirlemeniz gerekir. Hangi Uygun bir cevap almak için kullanmak. - Greg Hewgill


Cevap, pg_dump için kaynak kodunu kontrol etmek ve DDL'yi oluşturmak için kullandığı anahtarları takip etmektir. Kodun içinde bir yerde DDL'yi oluşturmak için kullanılan meta verileri almak için kullanılan bir dizi sorgu var.


4
2018-01-27 11:23





Neden psql'ye "programlı olarak" sayılmıyor? Tüm şemayı çok güzel dökecek.

Neyse, veri türlerini (ve daha fazlasını) information_schema (Burada referans verilen 8.4 belge, ancak bu yeni bir özellik değil):

=# select column_name, data_type from information_schema.columns
-# where table_name = 'config';
    column_name     | data_type 
--------------------+-----------
 id                 | integer
 default_printer_id | integer
 master_host_enable | boolean
(3 rows)

3
2018-01-27 12:55



Yukarıda belirttiğim gibi, çoğu kullanıcım pg_dump veya PostgreSQL sunucusuna erişim sağlayamayacak ve bu yüzden pg_dump davranışını yeniden üretmem gerekiyor. - ruipacheco
Sağ. Yani senin kodun bilgi şemasını sorgular (veya psql'ye gönderir), sonuçları ayrıştırır ve sonucu kullanıcılarınıza gösterir. - Wayne Conrad


Burada meta bilgisinin bilgi şemasından nasıl elde edileceğine dair iyi bir yazı var. http://www.alberton.info/postgresql_meta_info.html.


2
2017-08-09 08:35



Bu makale yararlı olabilir, ancak ilgili bitleri buraya göndermelisiniz; Linkler genellikle ölür. - Brad Koch


ben 4 fonksiyon kaydedildi alay etmek pg_dump -s davranış kısmen. Dayalı \d+ metacommand. Kullanım benzer şekilde akacaktır:

\pset format unaligned
select get_ddl_t(schemaname,tablename) as "--" from pg_tables where tableowner <> 'postgres';

Tabii ki daha önce fonksiyonlar oluşturmanız gerekiyor.

Burada çalışma örneği rextester 


0
2018-03-06 16:15