如何才能将未经准备的声明发送到水晶中的Postgres



是否可以将未准备好的语句发送到Postgres连接(使用crystal-dbcrystal-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

相关内容

  • 没有找到相关文章

最新更新