2009-12-10 10 views

Odpowiedz

4

Odpowiedzią jest sprawdzenie kodu źródłowego pg_dump i śledzenie przełączników używanych do generowania DDL. Gdzieś wewnątrz kodu znajduje się szereg zapytań używanych do pobierania metadanych użytych do wygenerowania DDL.

18

Można użyć polecenia pg_dump do zrzutu zawartości bazy danych (zarówno schematu, jak i danych). Przełącznik --schema-only zrzuci tylko plik DDL dla tabeli (tabel).

+0

Przepraszamy, trzeba to zrobić programowo. Większość ludzi nie miałaby zainstalowanego pg_dump lub dostępu do serwera z pg_dump. – ruipacheco

+6

Nie bardzo rozumiem twój komentarz. 'pg_dump' jest instalowany z PostgreSQL i jest dostępny na wszystkich serwerach. Do korzystania z niego nie są wymagane żadne specjalne uprawnienia użytkownika (normalne ustawienia kontroli PostgreSQL dotyczą bazy danych, którą przesyłasz). Jeśli nie uznasz tego za rozwiązanie programowe, będziesz musiał określić, jakiego środowiska programowego używasz *, aby uzyskać odpowiednią odpowiedź. –

3

Dlaczego wyłuskanie do psql nie jest liczone jako "programowo?" Bardzo ładnie zrzuci cały schemat.

Tak czy inaczej, można uzyskać typy danych (i dużo więcej) od information_schema (8,4 docs przywoływanych tutaj, ale nie jest to nowa funkcja):

=# 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) 
+0

Jak wspomniałem powyżej, większość moich użytkowników nie będzie miała dostępu do pg_dump lub serwera PostgreSQL, więc muszę odtworzyć zachowanie pg_dump. – ruipacheco

+0

Dobrze. Więc * Twój kod * wysyła zapytanie do schematu informacyjnego (lub powłoki do psql), analizuje wyniki i pokazuje wynik użytkownikom. –

23

Korzystanie pg_dump można to zrobić za pomocą tego polecenia:

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

Opis:

-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 

Niestety jeśli z tematu. Po prostu chcę pomóc, kto google "psql dump ddl" i uzyskać przekierowanie do tego wątku.

0

I saved 4 functions do makiety pg_dump -s zachowanie częściowo. Na podstawie metacommand \d+. Użycie będzie podobne:

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

Oczywiście musisz wcześniej utworzyć funkcje.

Working sample here at rextester