Есть ли эквивалент в MySQL SHOW CREATE TABLE
в Postgres? Это возможно? Если нет, каково следующее лучшее решение?
Мне нужно утверждение, потому что я использую его для создания таблицы на удаленном сервере (через WCF).
Есть ли эквивалент в MySQL SHOW CREATE TABLE
в Postgres? Это возможно? Если нет, каково следующее лучшее решение?
Мне нужно утверждение, потому что я использую его для создания таблицы на удаленном сервере (через WCF).
Ответы:
Вы можете попытаться отследить в файле журнала PostgreSQL, что действительно делает pg_dump -t table -s. Затем вы можете использовать тот же метод для написания своей собственной функции sql.
pg_dump:
pg_dump -st tablename dbname
или используйте PostgreSQL GUI Tools (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
. Как описано в man-странице, -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 ) делает именно это и многое другое.