使用续集,是有可能运行PostgreSQL“斜线”命令,例如\d
,\dn
或\copy table...
?
我尝试使用
DB.run(‘\dn’)
但出现语法错误,因为大概是Sequel试图解析SQL,或者Postgres无法理解SQL,因为这些是由psql
应用程序处理的命令。
斜杠命令是psql
服务器的功能,而不是服务器的功能,因此只能在中访问psql
。但是,其中一些(例如\copy
)具有服务器确实理解的等效项,其余的则是查询系统表的快捷方式。如果您运行psql -E
:
-E
--echo-hidden
回显由\d
和其他反斜杠命令生成的实际查询。您可以使用它来研究psql的内部操作。这等效于将变量设置ECHO_HIDDEN
为on。
那么您可以看到查询,并且应该可以将这些查询与DB.run
或一起使用DB.fetch(...).all
。例如:
$ psql -E -d...
=# \d
********* QUERY **********
SELECT n.nspname as "Schema",
c.relname as "Name",
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'table' WHEN 'I' THEN 'index' 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','p','v','m','S','f','')
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;
**************************
=# \dt
********* QUERY **********
SELECT n.nspname as "Schema",
c.relname as "Name",
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'table' WHEN 'I' THEN 'index' 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','p','')
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;
**************************
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句