【发布时间】:2021-07-05 10:11:32
【问题描述】:
我正在从 MySQL 迁移到 PostgreSQL,但出现以下错误:
PG::TooManyArguments: 错误:不能将超过 100 个参数传递给函数
当运行这样的查询时:
Project.where(id: ids)
翻译成什么
"SELECT \"projects\".* FROM \"projects\" WHERE \"projects\".\"id\" IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100) ORDER BY FIELD(projects.id, '1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','65','66','67','68','69','70','71','72','73','74','75','76','77','78','79','80','81','82','83','84','85','86','87','88','89','90','91','92','93','94','95','96','97','98','99','100')"
对我来说,通过特定 ID 进行查询是一个常见的用例,它与 MySQL 配合得很好。有什么方法可以让 PostgreSQL 工作?
我在 docker 容器上使用 PostgreSQL 13.2。
【问题讨论】:
-
据我所知
FIELD()不是 Postgres 中的函数。那么,您是否在使用某种第三方插件?还有为什么不只是ORDER BY projects.id? -
id 是从哪里来的?使用子查询可能会更容易
-
我没有使用任何第三方库,只是来自 dockerhub 的原始 PostgreSQL。 ID 并不总是连续的,它只是在这种情况下来自特定测试。
标签: ruby-on-rails postgresql activerecord