如何在 ActiveRecord 上执行 PostgreSQL 斜杠方法?
How to execute PostgreSQL slash methods on ActiveRecord?
我正在使用 Rails 4. 我正在尝试使用 ActiveRecord 中的 'execute' 方法列出所有带有 '\l' 的 PostgreSQL 数据库。已正确建立连接。
p = ActiveRecord::Tasks::PostgreSQLDatabaseTasks.new(configuration)
p.send 'establish_master_connection'
p.connection.execute('\l')
这里是错误:
ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR: syntax error at or near "l"
当我使用 'no slash' 方法时它工作正常
connection.execute("DROP DATABASE IF EXISTS NOTHING")
=> #<PG::Result:0xc5e6094 status=PGRES_COMMAND_OK ntuples=0 nfields=0 cmd_tuples=0>
有什么想法吗?
你不能。以 \
开头的命令是由 psql shell 本身实现的元命令 - 数据库服务器本身不知道它们的含义。
在列出各种内容的命令的特定情况下,这通常归结为查询 pg_catalog 中的表,例如
SELECT * FROM pg_catalog.pg_database
对于数据库
SELECT * FROM pg_catalog.pg_table
用于表格。这些记录在案 here
我正在使用 Rails 4. 我正在尝试使用 ActiveRecord 中的 'execute' 方法列出所有带有 '\l' 的 PostgreSQL 数据库。已正确建立连接。
p = ActiveRecord::Tasks::PostgreSQLDatabaseTasks.new(configuration)
p.send 'establish_master_connection'
p.connection.execute('\l')
这里是错误:
ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR: syntax error at or near "l"
当我使用 'no slash' 方法时它工作正常
connection.execute("DROP DATABASE IF EXISTS NOTHING")
=> #<PG::Result:0xc5e6094 status=PGRES_COMMAND_OK ntuples=0 nfields=0 cmd_tuples=0>
有什么想法吗?
你不能。以 \
开头的命令是由 psql shell 本身实现的元命令 - 数据库服务器本身不知道它们的含义。
在列出各种内容的命令的特定情况下,这通常归结为查询 pg_catalog 中的表,例如
SELECT * FROM pg_catalog.pg_database
对于数据库
SELECT * FROM pg_catalog.pg_table
用于表格。这些记录在案 here