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;