是否可以向Postgres连接发送未准备好的语句(使用crystal-db
和crystal-pg
分片)?
我尝试使用.query
方法运行以下语句,但它们失败了,因为它们使用prepared statement
,这会阻止多个语句运行。也许unprepared statement
会起作用吗?:
SET LOCAL my.val = 'abc';
SELECT current_setting('my.val') as my_val, 'aa' as now_;
答案 0 :(得分:0)
PG分片允许:"扩展查询"协议(使用准备好的语句并允许参数),以及简单的查询"协议(没有返回值的多个语句)。
为了防止出现一些问题,分片作者决定只使用"扩展查询返回结果"协议。因此,您唯一的另一种选择是使用"扩展查询"在交易中。这将允许多个语句(例如SET,SELECT等):
DB.open(uri) do |db|
db.transaction { |tx|
tx.connection.exec "SET LOCAL my.val = 'abc';"
puts tx.connection.scalar("SELECT current_setting('my.val') as my_val;").inspect
}
db.transaction { |tx|
puts tx.connection.scalar("SELECT current_setting('my.val') as my_val;").inspect
}
end
输出:
"abc"
""