Jak programowo wygenerować plik DDL tabeli w PostgreSQL? Czy istnieje zapytanie systemowe lub polecenie, aby to zrobić? Googlowanie problemu nie zwróciło żadnych wskazówek.Generowanie programu DDL programowo na Postgresql
Odpowiedz
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.
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).
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)
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
Dobrze. Więc * Twój kod * wysyła zapytanie do schematu informacyjnego (lub powłoki do psql), analizuje wyniki i pokazuje wynik użytkownikom. –
Oto dobry artykuł o tym, jak dostać meta informacja ze schematu informacji, http://www.alberton.info/postgresql_meta_info.html.
Ten artykuł może być przydatny, ale powinieneś opublikować odpowiednie bity tutaj; linki często giną. –
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.
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.
Przepraszamy, trzeba to zrobić programowo. Większość ludzi nie miałaby zainstalowanego pg_dump lub dostępu do serwera z pg_dump. – ruipacheco
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ź. –