在postgres中是否有MySQL相当于SHOW CREATE TABLE的表?


66

SHOW CREATE TABLE在postgres中有与MySQL等效的MySQL 吗?这可能吗?如果不是,那么下一个最佳解决方案是什么?

我需要该语句,因为我使用它在远程服务器(通过WCF)上创建表。


而且我认为MySQL是缺少所有出色功能的数据库……
Christopher K.

Answers:


27

您可以尝试在PostgreSQL日志文件中跟踪“ pg_dump -t table -s”的实际作用。然后,可以使用相同的方法编写自己的sql函数。


好的,我跟踪了pg_dump。但这并不是那么容易,因为我不得不用C#编写自己的函数来编写create table语句。但这是很大的帮助,非常感谢veeeeerrrryyyyy。:D
vlebar 2011年

无需解决所有麻烦-根据此处的说明,您可以-E在运行psql命令时使用该选项来跟踪后台发生的情况-E: will describe the underlaying queries of the \ commands (cool for learning!)--HTH!
Vérace

40

pg_dump:

pg_dump -st tablename dbname

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


我将尝试更详细地解释问题。我需要sql语句(选择或存储过程),因为我在C#中执行了sql命令(NpgsqlCommand)。所以我认为pg_dump在这种情况下不是解决方案。:(
vlebar 2011年

1
为什么不?--schema-only具有以下确切目的:显示SQL语句以创建架构/表。然后,您可以通过某种方式将此输出输入到C#程序中。
Sven


1
@SvenW:如果我有一组已知的表,我会这样做。问题是,用户可以选择同步数据库中选定的表,然后在wcf服务后面的远程服务器上创建选定的表。我可以使用mssql做到这一点,现在我想将客户端程序扩展到其他sql服务器(mysql,oracle,postgresql等)。好的,我可以为用户要同步的表执行pg_dump,但是如果是完全有可能在plsql中做到这一点,我想在plsql中做到这一点
vlebar 2011年

1
如果转储到.tar,请restore.sql从存档中获取文件。它具有所有create语句。
约瑟夫·卢斯特


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 ' || $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;

这应该是公认的答案
exebook

这次真是万分感谢!
坦率

3

我知道我参加这次聚会有点晚了,但这是我的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

然后就可以以正确的格式构建查询字符串。


2

https://serverfault.com/a/875414/333439中所述,使用\d <table>meta命令psql可以显示数据库中的表结构。如果要查看在meta-command中使用的查询,可以使用command psql -E。如联机帮助页中所述,该-E开关将回显\d元命令查询。因此,您可以启动psql -E,可以使用\d <table>meta命令查看表结构,并且根据-E开关,您可以查看生成的用于描述表结构的查询


0

pgAdmin 4中,只需在左侧树中找到表,例如:

Servers
+ PostgreSQL 11
  + Databases
    + MYDATABASENAME
      + Schemas
        + public
          + Tables
            + MYTABLENAME  <-- click this tree element

选择表格后,打开右侧的“ SQL”选项卡。它显示CREATE TABLE所选表的。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.