Чи є еквівалент MySQL SHOW CREATE TABLE
в постгресах? Чи можливо це? Якщо ні, то наступне найкраще рішення?
Виписка мені потрібна, оскільки я використовую її для створення таблиці на віддаленому сервері (над WCF).
Чи є еквівалент MySQL SHOW CREATE TABLE
в постгресах? Чи можливо це? Якщо ні, то наступне найкраще рішення?
Виписка мені потрібна, оскільки я використовую її для створення таблиці на віддаленому сервері (над WCF).
Відповіді:
Ви можете спробувати простежити в файлі журналу PostgreSQL, що насправді робить "pg_dump -t table -s". Тоді ви можете використовувати той же метод, щоб написати власну функцію sql.
pg_dump:
pg_dump -st tablename dbname
або використовувати інструменти графічного інтерфейсу PostgreSQL (pgAdmin, phpPgAdmin тощо)
--schema-only
має саме таку мету: Показати оператори SQL для створення схеми / таблиці. Ви можете якось подати цей вихід у свою програму C #.
.tar
, візьміть restore.sql
файл з архіву. У ньому є всі заяви про створення.
У командному рядку ( psql
) ви можете запустити: \d <table name>
перелічити всі стовпці, їх типи та індекси.
Спираючись на першу частину відповіді @ CubicalSoft, ви можете скористатися наступною функцією, яка повинна працювати для простих таблиць (передбачає "загальнодоступну" схему "за замовчуванням" і не містить обмежень, індексів та визначених користувачем типів даних тощо тощо). @RJS відповідь - єдиний спосіб зробити це належним чином на даний момент; це те, що має бути вбудовано в 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;
Я розумію, що я трохи запізнююся на цю вечірку, але це був перший результат мого пошуку в Google, тому я зрозумів, що відповім, що придумав.
З цим запитом можна отримати досить далеко до рішення, щоб отримати стовпці:
SELECT *
FROM information_schema.columns
WHERE table_schema = 'YOURSCHEMA' AND table_name = 'YOURTABLE'
ORDER BY ordinal_position;
І тоді цей запит для найбільш поширених індексів:
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
Тоді мова йде про створення рядків (запитів) у потрібному форматі.
Як відповіли в https://serverfault.com/a/875414/333439 , за допомогою \d <table>
мета-команди psql
можна показати структуру таблиці в базі даних. Якщо ви хочете переглянути запит, який використовується в метакоманді, ви можете використовувати команду psql -E
. Як описано на сторінці, -E
перемикач повторює \d
запити метакоманд. Отже, ви можете запустити psql -E
, ви можете переглянути структуру таблиці за допомогою \d <table>
метакоманди, і, відповідно до -E
перемикача, ви можете переглянути запит, сформований для опису структури таблиці
У pgAdmin 4 просто знайдіть таблицю на дереві зліва, наприклад:
Servers
+ PostgreSQL 11
+ Databases
+ MYDATABASENAME
+ Schemas
+ public
+ Tables
+ MYTABLENAME <-- click this tree element
Коли таблиця обрана, відкрийте вкладку SQL праворуч. Він відображає позначення CREATE TABLE
для вибраної таблиці.
Розширення Postgres ddlx ( https://github.com/lacanoid/pgddl ) робить саме це та багато іншого.