【问题标题】:Ruby: How to dynamically replace parameters in native PG gemRuby:如何在原生 PG gem 中动态替换参数
【发布时间】:2021-10-27 03:52:46
【问题描述】:

据我所见,某些语句的文档不允许动态操作,比如我想执行语句

res = conn.exec_params('CREATE DATABASE $1',[dbname])

我收到了这个错误

Error: ERROR:  syntax error at or near "$1"
LINE 1: CREATE DATABASE $1

如果我使用select语句SELECT * FROM pg_database WHERE datname = $1这个语句是成功的。

虽然 dbd/pg gem 不存在上述问题,但它似乎从 2010 年过去开始尚未发布,它将动态参数转换为本机 pg,并且最新的 ruby​​ 和 pg gem dbd/pg 不起作用。

我的问题是我们有没有办法使用原生 PG gem 来执行动态替换变量与创建数据库,插入类似的语句。或者是否有任何替代 dbd/pg 提供相同功能的替代品?

【问题讨论】:

    标签: ruby postgresql pg


    【解决方案1】:

    占位符(即$1$2、...)用于值。数据库名称(或表名称、列名称……)是一个标识符。这类似于变量名和变量在 Ruby 中所持有的值之间的差异。

    如果您需要在某些 SQL 中动态插入标识符,那么您需要使用字符串插值和特殊用途的 quote_ident 方法来确保正确引用它。所以更像这样:

    db_name = conn.quote_ident(db_name)
    res     = conn.exec("CREATE DATABASE #{db_name}")
    

    【讨论】:

      猜你喜欢
      • 2015-08-05
      • 2010-11-22
      • 2017-01-03
      • 1970-01-01
      • 2013-11-01
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多