SHOW CREATE TABLE
的等效项?这可能吗?如果不是第二个最佳解决方案,那是什么?我需要该语句,因为我使用它在远程服务器(通过WCF)上创建表。
#1 楼
您可以尝试在PostgreSQL日志文件中跟踪“ pg_dump -t table -s”的实际作用。然后,您可以使用相同的方法编写自己的sql函数。#2 楼
pg_dump:pg_dump -st tablename dbname
或使用PostgreSQL GUI工具(pgAdmin,phpPgAdmin等)
评论
我将尝试更详细地解释问题。我需要sql语句(选择或存储过程),因为我在C#中执行了sql命令(NpgsqlCommand)。所以我认为pg_dump在这种情况下不是解决方案。 :(
–vlebar
2011年2月6日22:00
为什么不? --schema-only具有此确切目的:显示SQL语句以创建架构/表。然后,您可以通过某种方式将此输出输入到C#程序中。
– Sven
2011年2月6日在22:10
查看information_schema视图:postgresql.org/docs/9.0/interactive/information-schema.html
– alvosu
2011年2月6日在22:12
@SvenW:如果我有一组已知的表,我会这样做。问题在于,用户可以选择同步选定数据库中的任何表,然后在wcf服务后面的远程服务器上创建选定表。我可以使用mssql做到这一点,现在我想将客户端程序扩展到其他sql服务器(mysql,oracle,postgresql等)。好了,我可以为用户要同步的表执行pg_dump,但如果是完全有可能在plsql中做到这一点,我想在plsql中做到这一点
–vlebar
2011年2月6日在22:36
如果转储到.tar,请从存档中获取restore.sql文件。它具有所有create语句。
–约瑟夫·欲望
17年3月17日在10:45
#3 楼
在命令行(psql
)中,可以运行:\d <table name>
列出所有列,它们的类型和索引。评论
这是有帮助的,但不能回答问题。
–ryantuck
18年7月13日在16:21
问题是不同的。
– Ivailo Bardarov
20-04-27在18:27
无法回答问题,也无法理解为什么这么多人对此表示反对
–法雷
20年12月8日,2:01
#4 楼
在@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 ' || || ' (' || || '' ||
string_agg(column_list.column_expr, ', ' || || '') ||
'' || || ');'
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 =
ORDER BY ordinal_position) column_list;
$BODY$
LANGUAGE SQL STABLE;
评论
这应该是公认的答案
– exebook
19年1月7日,9:25
这次真是万分感谢!
–坦率
19年6月13日在4:16
EoghanM,太好了。谢谢!
– Eric M
19年11月30日在20:22
#5 楼
我知道我参加这次聚会有点晚了,但这是我的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
那么就可以用正确的格式构建查询字符串了。
#6 楼
正如在https://serverfault.com/a/875414/333439中回答的那样,使用\d <table>
中的psql
元命令可以显示数据库中的表结构。如果要查看在meta命令中使用的查询,可以使用命令psql -E
。如手册中所述,-E
开关回显\d
元命令查询。因此,您可以启动psql -E
,可以使用\d <table>
元命令查看表结构,并根据-E
开关,可以查看生成的用于描述表结构的查询评论
我可以看到用于显示“ \ d表”输出的SQL命令,但是看不到用于创建表的SQL语句。
– Ivailo Bardarov
20/04/27在18:34
#7 楼
Postgres扩展ddlx(https://github.com/lacanoid/pgddl)可以做到这一点以及更多。#8 楼
在pgAdmin 4中,只需在左侧树中找到该表,例如:Servers
+ PostgreSQL 11
+ Databases
+ MYDATABASENAME
+ Schemas
+ public
+ Tables
+ MYTABLENAME <-- click this tree element
选择该表后,打开右侧的SQL选项卡。它显示所选表的
CREATE TABLE
。
评论
好的,我跟踪了pg_dump。但这并不是那么容易,因为我不得不用C#编写自己的函数来编写create table语句。但这是很大的帮助,非常感谢veeeeerrrryyyyy。 :D
–vlebar
2011-2-9在7:41
无需解决所有麻烦-根据这里,您可以使用-E选项来跟踪运行psql命令时后台发生的情况--E:将描述\命令的底层查询(学习很酷) !)-HTH!
–Vérace
19-10-4在13:38