.schema for postgres

时间:2011-08-22 21:51:45

标签: sqlite postgresql

我正在将数据库从sqlite3迁移到postgres,我想知道是否有任何简短的教程可以教我新的语法。

另外,作为一个短期问题,如何在sqlite中看到postgres表的架构,该架构等同于.schema

4 个答案:

答案 0 :(得分:5)

您可以使用pg_dump命令行实用程序,即:

pg_dump --table <table_name> --schema-only <database_name>

根据您的环境,您可能需要指定连接选项(-h,-p,-U开关)。

答案 1 :(得分:3)

您可以在psql内使用\d

=> \?
...

Informational
  (options: S = show system objects, + = additional detail)
  \d[S+]                 list tables, views, and sequences
  \d[S+]  NAME           describe table, view, sequence, or index
...

=> \d people
                                           Table "public.people"
         Column         |            Type             |                      Modifiers                      
------------------------+-----------------------------+-----------------------------------------------------
 id                     | integer                     | not null default nextval('people_id_seq'::regclass)
 created_at             | timestamp without time zone | not null
 updated_at             | timestamp without time zone | not null
...
Indexes:
    "people_pkey" PRIMARY KEY, btree (id)
...
Check constraints:
    "chk_people_latlng" CHECK ((lat IS NULL) = (lng IS NULL))
....

如果您不在psql内,也可以在information_schema内找到根源。

答案 2 :(得分:1)

如果您正在使用psql(和\ d ...),那么您可以

\set ECHO_HIDDEN

查看psql正在执行的查询的sql以将\ d ...输出放在一起 - 这不仅仅是作为sql语法示例有用,而且它还显示了查找和如何连接数据库的位置元数据。

要获取表格的模式名称,您可以:

SELECT  n.nspname AS schema_name,
        c.relname AS table_name
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname = '<table_name>'
;

(不知道与.schema相比如何)

答案 3 :(得分:1)