Ruby / Rails 字符串数组插入 PostgreSQL

2023-11-29

目前,我有一个 Rails 项目,我正在尝试将活动记录直接传递到 postgres,以便使用字符串数组进行大批量创建,其中值尚不存在(以避免重复)。我面临的问题是试图将 ruby​​ 数组中包含 ' 或 ( 等的字符串字符转义为 postgres 可以接受的。示例如下(显然它不起作用):

红宝石数组:

array_of_strings = ["example one's value", "example (2) value"]

sql = "INSERT INTO TABLE (column) SELECT column FROM TABLE UNION VALUES #{array_of_strings} EXCEPT SELECT column FROM TABLE;"

ActiveRecord::Base.connection.execute(ActiveRecord::Base.send(:sanitize_sql_array, sql))

对于这样的事情,我会忽略 ActiveRecord 引用和转义的内容,直接转到ActiveRecord::Base.connection.quote.

您尝试最终得到的 SQL 是这样的:

INSERT INTO TABLE (column)
SELECT column FROM TABLE
UNION VALUES ('example one''s value'), ('example (2) value')
EXCEPT SELECT column FROM TABLE

您可以使用quote转换' to ''(请注意,SQL 将单引号加倍以转义它们)但您必须自己在 VALUES 中添加适当的括号。连接的quote方法还将添加外部单引号。

像这样的东西:

values = array_of_strings.map { |s| "(#{ActiveRecord::Base.connection.quote(s)})" }.join(',')

其次是:

sql = %Q{
    INSERT INTO TABLE (column)
    SELECT column FROM TABLE
    UNION VALUES #{values}
    EXCEPT SELECT column FROM TABLE
}

应该能解决问题并且安全。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby / Rails 字符串数组插入 PostgreSQL 的相关文章

随机推荐

  • 在离线 iOS 应用程序中使用 MBTiles

    我已经有一个使用 MBTiles 格式存储的地图 我想在我正在制作的应用程序中使用它 应用程序在移动设备上没有信号 连接的情况下运行至关重要 Mapbox 之前有一个示例 介绍了如何将 MBTiles 与 RMMBTilesSource 一
  • 使用四元数从 iPhone 计算偏航、俯仰和滚动?

    我见过很多问题和文章提到四元数可以用来从 iPhone 获得更好 更准确 更稳定的偏航 俯仰和横滚读数 而不是读取它的直接偏航 俯仰和横滚读数 但与此同时 我还没有看到任何在iPhone平台上实现四元数的正确方法 作为初学者 真的很难知道这
  • Socket.io 不适用于 Firefox 和 Chrome

    我正在尝试开发一个简单的聊天应用程序 这是我的chat js file var app require http createServer handler io require socket io listen app fs require
  • 在 python 中使用 cairosvg 模块时可以指定缩放吗

    cairosvg 的命令行版本允许缩放 这是帮助函数的输出 cairosvg h usage cairosvg h v f pdf png ps svg d DPI W WIDTH H HEIGHT s SCALE u o OUTPUT i
  • Kafka Streams - 如何更好地控制内部创建的状态存储主题的分区?

    Kafka Streams 中的状态存储是在内部创建的 状态存储按键分区 但不允许提供除by key 据我所知 问题 How to 控制状态存储内部创建主题的分区数量 状态存储主题如何推断默认情况下要使用的分区数量和分区 以及如何覆盖 如果
  • OpenGL 计算着色器 SSBO

    我想要一个在输出缓冲区中写入 1 的计算着色器 我编译着色器并将其附加到程序中 没有问题 然后我调用glDispatchCompute 函数 我等到计算着色器结束 但当我看到数组时 只有 0 谁能告诉我错误在哪里 这是我的计算着色器代码 v
  • 是否无法从 BroadcastReceiver 启动活动

    我想从扩展 BroadcastReceiver 的类中调用此活动 但它不起作用 Intent i new Intent DevicePolicyManager ACTION SET NEW PASSWORD context startAct
  • OmniFaces 条件注释未写入 HTML 输出

    我正在使用 OmniFaces conditionalComment 加载 IE 6 浏览器的 javascript 文件 在网站上 它说脚本应该包含在页面中 如下所示 这不是有效的 xml 因此不能在 JSF xhtml 文件中使
  • 正则表达式从数字到数字匹配?

    有没有办法从一个数字到另一个数字进行正则表达式 我有这个曲目列表 01 Intro 02 Waage 03 Hy nen feat Samra 04 Ich will es bar feat Haftbefehl 05 Am Boden b
  • 使用 Apache 的不同 Php-Fpm 容器

    我的生产服务器正在运行具有经典结构的 Docker Db Container Server Container 和 Php Fpm 容器 我想做的是拆分源代码 以便为项目的 3 个主要部分提供不同的容器 现在 它们以旧的方式工作 例如用于主
  • j_security_check 连接中断

    我正在使用tomcat的身份验证 当我将登录页面打开大约半小时然后尝试登录时 出现以下错误 URL http localhost pc j security check 页面内容 连接中断 加载页面时重置了与服务器的连接 协商连接时网络链接
  • Unity从服务器下载视频并保存

    我想从我的服务器获取视频并将其保存在我的资源中 以便稍后在游戏中查看 我知道使用 www 但我不明白如何从我的服务器下载视频并给出它的网址 下面是获取视频作为纹理的代码 var www new WWW http Sameer com Sam
  • 如何在 select2 选择上启用悬停事件

    我正在使用 select2 内置事件不支持所选项目上的悬停事件 因此我尝试在鼠标悬停在该项目上时触发悬停事件 多项选择 function tagFormat state return span class tagElement state
  • SoundCloud API URL 超时,然后在大约 50% 的曲目上返回错误 403 [已关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我注意到这个问题过去已经被报道过很多次了 但似乎 SoundCloud 支持团队中没有人真正能够解决这个问题 从本周开始 SoundCloud API URL 就会超时 再次
  • Java可以过滤脏话吗?

    我想知道是否可以过滤脏话 过滤脏话的一个例子是创建帐户时的用户名 这样它就可以通知用户该词是不可接受的 是否可以 谢谢 不 不可能使用任何编程语言来过滤不良语言单词 您能做的最好的事情就是创建一个不良语言单词列表 然后对照该列表进行检查 只
  • 如果条件为假,则将单元格留空

    其他问题也涉及到这一点 并提供了对于非常大的数据集不可行的解决方案 我有一个跨 9 列的公式 如下所示 IF A1 A2 B2 zz 然后 我自动填充大约 350 万个单元格 复制 gt 粘贴值 然后我找到 zz 并将其替换为 空单元格 然
  • a=a++ 在 java 中如何工作[重复]

    这个问题在这里已经有答案了 最近我发现了这段Java代码 int a 0 for int i 0 i lt 100 i a a System out println a a 的打印值是 0 但是在 C 的情况下 a 的值是 100 我无法理
  • 使用 TitanDB 进行 UPSERT

    我正在迈出作为 TitanDB 用户的第一步 也就是说 我想知道如何进行更新插入 有条件地在一个顶点中插入一个顶点TitanTransaction 以 获取或创建 的风格 我在要创建 查找的顶点 属性上有一个唯一索引 下面是 Titan 1
  • Android:使图像不透明/透明

    问候 我想将图像放置在表面视图上 不过 我希望图像是透明的 这样您就可以看到图像以及不可见的表面视图 谁能建议我如何做到这一点 这就是我在绘制形状之前的做法 Bitmap buffer Bitmap createBitmap width h
  • Ruby / Rails 字符串数组插入 PostgreSQL

    目前 我有一个 Rails 项目 我正在尝试将活动记录直接传递到 postgres 以便使用字符串数组进行大批量创建 其中值尚不存在 以避免重复 我面临的问题是试图将 ruby 数组中包含 或 等的字符串字符转义为 postgres 可以接