Czy SHOW CREATE TABLE
w postgresie jest odpowiednik MySQL ? czy to możliwe? Jeśli nie, jakie jest następne najlepsze rozwiązanie?
Potrzebuję instrukcji, ponieważ używam jej do tworzenia tabeli na zdalnym serwerze (przez WCF).
Czy SHOW CREATE TABLE
w postgresie jest odpowiednik MySQL ? czy to możliwe? Jeśli nie, jakie jest następne najlepsze rozwiązanie?
Potrzebuję instrukcji, ponieważ używam jej do tworzenia tabeli na zdalnym serwerze (przez WCF).
Odpowiedzi:
Możesz spróbować prześledzić w pliku dziennika PostgreSQL, co tak naprawdę robi „pg_dump -t table -s”. Następnie możesz użyć tej samej metody do napisania własnej funkcji SQL.
pg_dump:
pg_dump -st tablename dbname
lub użyj narzędzi GUI PostgreSQL (pgAdmin, phpPgAdmin itp.)
--schema-only
ma dokładnie ten cel: Pokaż instrukcje SQL, aby utworzyć schemat / tabelę. Możesz w jakiś sposób wprowadzić to wyjście do swojego programu C #.
.tar
, pobierz restore.sql
plik z archiwum. Zawiera wszystkie instrukcje tworzenia.
W linii poleceń ( psql
) możesz uruchomić: \d <table name>
aby wyświetlić wszystkie kolumny, ich typy i indeksy.
Opierając się na pierwszej części odpowiedzi @ CubicalSoft, możesz dodać następującą funkcję, która powinna działać w przypadku prostych tabel (zakłada domyślny „publiczny” schemat i pomija ograniczenia, indeksy i typy danych zdefiniowane przez użytkownika itp.). Odpowiedź @RJS jest w tej chwili jedynym sposobem, aby zrobić to właściwie; jest to coś, co powinno być wbudowane w psql!
CREATE OR REPLACE FUNCTION show_create_table(table_name text, join_char text = E'\n' )
RETURNS text AS
$BODY$
SELECT 'CREATE TABLE ' || $1 || ' (' || $2 || '' ||
string_agg(column_list.column_expr, ', ' || $2 || '') ||
'' || $2 || ');'
FROM (
SELECT ' ' || column_name || ' ' || data_type ||
coalesce('(' || character_maximum_length || ')', '') ||
case when is_nullable = 'YES' then '' else ' NOT NULL' end as column_expr
FROM information_schema.columns
WHERE table_schema = 'public' AND table_name = $1
ORDER BY ordinal_position) column_list;
$BODY$
LANGUAGE SQL STABLE;
Zdaję sobie sprawę, że jestem trochę spóźniony na tę imprezę, ale był to pierwszy wynik mojej wyszukiwarki Google, więc pomyślałem, że odpowiem na to, co wymyśliłem.
Za pomocą tego zapytania możesz dotrzeć dość daleko w kierunku rozwiązania, aby uzyskać kolumny:
SELECT *
FROM information_schema.columns
WHERE table_schema = 'YOURSCHEMA' AND table_name = 'YOURTABLE'
ORDER BY ordinal_position;
A potem zapytanie dla najpopularniejszych indeksów:
SELECT c.oid, c.relname, a.attname, a.attnum, i.indisprimary, i.indisunique
FROM pg_index AS i, pg_class AS c, pg_attribute AS a
WHERE i.indexrelid = c.oid AND i.indexrelid = a.attrelid AND i.indrelid = 'YOURSCHEMA.YOURTABLE'::regclass
ORDER BY" => "c.oid, a.attnum
Następnie należy zbudować ciąg zapytania w odpowiednim formacie.
Zgodnie z odpowiedzią w https://serverfault.com/a/875414/333439 , przy użyciu \d <table>
meta-polecenia psql
można wyświetlić strukturę tabeli w bazie danych. Jeśli chcesz wyświetlić zapytanie użyte w meta-poleceniu, możesz użyć polecenia psql -E
. Jak opisano na stronie podręcznika, -E
przełącznik powtarza \d
zapytania meta-komend. Więc możesz uruchomić psql -E
, możesz wyświetlić strukturę tabeli za pomocą \d <table>
meta-polecenia, i, zgodnie z -E
przełącznikiem, możesz wyświetlić wygenerowane zapytanie opisujące strukturę tabeli
W pgAdmin 4 po prostu znajdź tabelę w drzewie po lewej stronie, np .:
Servers
+ PostgreSQL 11
+ Databases
+ MYDATABASENAME
+ Schemas
+ public
+ Tables
+ MYTABLENAME <-- click this tree element
Po wybraniu tabeli otwórz kartę SQL po prawej stronie. Wyświetla CREATE TABLE
wybraną tabelę.
Rozszerzenie Postgres ddlx ( https://github.com/lacanoid/pgddl ) robi dokładnie to i wiele więcej.