0

所以我不知道该怎么做,我一直在阅读文档并四处搜索,但我似乎找不到任何东西。\d 给了我一个很好的列表,列出了所有的表和它们的信息,但我希望能够向 postgresql 数据库发送一个命令并将它的管道传输到一个只包含表名的文本文件中。

4

3 回答 3

2

使用以下开关运行 psql。它将显示 psql 发送到目录以获取此类信息的内部命令:

-E
--echo-hidden

回显由 \d 和其他反斜杠命令生成的实际查询。你可以用它来研究psql的内部操作。这等效于在 psql 中设置变量 ECHO_HIDDEN。

http://www.postgresql.org/docs/current/static/app-psql.html

例如:

~ $ psql -E
SET
psql (9.2.4)
Type "help" for help.

denis=# \dt
********* QUERY **********
SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' END as "Type",
  pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
      AND n.nspname <> 'pg_catalog'
      AND n.nspname <> 'information_schema'
      AND n.nspname !~ '^pg_toast'
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;
**************************

       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | test | table | denis
(1 row)
于 2013-06-18T15:06:31.143 回答
1

作为 Denis 解决方案的替代方案,您可能需要:

select table_name from information_schema.tables;

但这势必会导致缺少模式信息的问题。

于 2013-06-18T15:09:34.963 回答
0

这就是我想出的帮助打印表格名称的方法

SELECT c.relname as "Name"
FROM pg_catalog.pg_class c
     JOIN pg_catalog.pg_roles r ON r.oid = c.relowner
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
  AND n.nspname <> 'pg_catalog'
  AND n.nspname !~ '^pg_toast'
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1;
于 2013-06-18T15:21:51.763 回答