r语言 - 是否可以通过 RPostgresql 运行 Postgres 反斜杠命令?



Postgres有许多方便的"反斜杠"命令(例如dtdul等(。 我想通过RPostgresql接口运行这些。 我尝试了以下方法:

drv = dbDriver("PostgreSQL")
con <- dbConnect(drv, 
dbname = "my_database", 
host = "**********", 
port = ****, 
user = "******", 
password = "******")
dbExecute(con, "\dt")
# Close PostgreSQL connection  
dbDisconnect(con) 

但是,我收到以下错误:

Error in postgresqlExecStatement(conn, statement, ...) : 
RS-DBI driver: (could not Retrieve the result : ERROR:  syntax error at or 
near ""
LINE 1: dt
^
)

是否可以从RPostgresql运行这些?还是反斜杠命令仅限于命令行psql

反斜杠命令由psqlCLI 工具解释,底层客户端库不知道它们是什么,PostgreSQL 服务器也不知道。RPostgresql 将使用客户端库(或者直接使用 PostgreSQL 协议与服务器通信(,因此反斜杠命令将不可用。

但是,反斜杠命令大多只是访问 PostgreSQL 系统表的查询的方便包装器。psql有一个-E开关,可让您查看以下查询:

-E
--echo-hidden
显由d和其他反斜杠命令生成的实际查询。您可以使用它来研究 psql 的内部操作。这等效于将变量ECHO_HIDDEN设置为 on。

因此,您可以运行psql -E ...以查看如何实现dt

=> 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' 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;
**************************
List of relations
...

然后像 RPostgreSQL 中的任何其他查询一样运行 SQL。

最新更新