postgres中有SHOW CREATE TABLE的MySQL吗?

postgres中有SHOW CREATE TABLE的MySQL吗? 这可能吗? 如果不是下一个最好的解决scheme是什么?

我需要的声明,因为我用它来创build远程服务器上的表(通过WCF)。

您可以尝试在PostgreSQL日志文件中追踪“pg_dump -t table -s”的真正含义。然后您可以使用相同的方法编写自己的sql函数。

pg_dump的:

 pg_dump -st tablename dbname 

或使用PostgreSQL GUI工具(pgAdmin,phpPgAdmin等)

在命令行( psql )中,可以运行: \d <table name>来列出所有列及其types和索引。

我意识到我参加这个派对有点迟,但是这是我的Googlesearch的第一个结果,所以我想我会回答我提出的问题。

你可以用这个查询来获得列的方法很远。

 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 

然后,它是以正确的格式构build查询string的问题。

build立在@ CubicalSoft答案的第一部分,你可以在下面的函数中使用简单的表(假设默认的'公共'模式',省略约束,索引和用户定义的数据types等)。 @RJS的答案是目前正确做到这一点的唯一方法; 这是应该build立到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;