Answers:
您可以尝试在PostgreSQL日志文件中跟踪“ pg_dump -t table -s”的实际作用。然后,可以使用相同的方法编写自己的sql函数。
pg_dump:
pg_dump -st tablename dbname
或使用PostgreSQL GUI工具(pgAdmin,phpPgAdmin等)
--schema-only
具有以下确切目的:显示SQL语句以创建架构/表。然后,您可以通过某种方式将此输出输入到C#程序中。
.tar
,请restore.sql
从存档中获取文件。它具有所有create语句。
以@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>
meta命令psql
可以显示数据库中的表结构。如果要查看在meta-command中使用的查询,可以使用command psql -E
。如联机帮助页中所述,该-E
开关将回显\d
元命令查询。因此,您可以启动psql -E
,可以使用\d <table>
meta命令查看表结构,并且根据-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)可以做到这一点以及更多。