如何 运行 Postgres psql "slash" 命令使用 Sequel
How to run Postgres psql "slash" commands using Sequel
使用Sequel,是否可以运行PostgreSQL"slash"命令,例如\d
、\dn
或\copy table...
?
我尝试使用
DB.run(‘\dn’)
但是我得到了语法错误,因为,大概 Sequel 正在尝试解析 SQL,或者 Postgres 无法理解 SQL,因为这些命令是由 psql
应用程序处理。
斜杠命令是 psql
的功能,而不是服务器的功能,因此它们只能在 psql
中访问。但是,其中一些(例如 \copy
)具有服务器确实理解的等价物,其余的是查询系统表的快捷方式。如果你 运行 psql -E
:
-E
--echo-hidden
Echo the actual queries generated by \d
and other backslash commands. You can use this to study psql's internal operations. This is equivalent to setting the variable ECHO_HIDDEN
to 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;
**************************
使用Sequel,是否可以运行PostgreSQL"slash"命令,例如\d
、\dn
或\copy table...
?
我尝试使用
DB.run(‘\dn’)
但是我得到了语法错误,因为,大概 Sequel 正在尝试解析 SQL,或者 Postgres 无法理解 SQL,因为这些命令是由 psql
应用程序处理。
斜杠命令是 psql
的功能,而不是服务器的功能,因此它们只能在 psql
中访问。但是,其中一些(例如 \copy
)具有服务器确实理解的等价物,其余的是查询系统表的快捷方式。如果你 运行 psql -E
:
-E
--echo-hidden
Echo the actual queries generated by\d
and other backslash commands. You can use this to study psql's internal operations. This is equivalent to setting the variableECHO_HIDDEN
to 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;
**************************