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

ich*_*len 1 postgresql r rpostgresql

Postgres 有许多方便的“反斜杠”命令(例如\dt\du\l等)。我想通过 RPostgresql 接口运行这些。我已经尝试过以下方法:

drv = dbDriver("PostgreSQL")
con <- dbConnect(drv, 
                 dbname = "my_database", 
                 host = "**********", 
                 port = ****, 
                 user = "******", 
                 password = "******")

dbExecute(con, "\\dt")

# Close PostgreSQL connection  
dbDisconnect(con) 
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

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

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

mu *_*ort 6

反斜杠命令由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
...
Run Code Online (Sandbox Code Playgroud)

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