是否可以将未准备好的语句发送到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_;
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"
""
来源: https://github.com/will/crystal-pg/issues/139