我正在使用Rails 4.1和Postgresql(带有PG gem)作为数据库。从公司到省份,我有很多对很多的协会,并有一个名为region的联接表。现在很明显regions表没有主键,因为我使用了{:id => false}。但是,当我尝试使用dependency destroy或仅对自身的区域对象调用destroy时,会出现以下错误:

 ERROR:  zero-length delimited identifier at or near """"
 LINE 1: DELETE FROM "regions" WHERE "regions"."" = $1

我知道问题是由于缺少Regions表的主键引起的。奇怪的是,如果我将主键添加回表中,destroy可以正常工作并且没有错误。但是,如果我从表中删除主键,则会返回错误。我知道这与postgres有关,但是我不知道如何解决这个问题而不必在我的地区表中添加主键列。

这是实际的查询
[DEBUG] [AdminUser Load (0.4ms)  SELECT  "admin_users".* FROM "admin_users"  WHERE "admin_users"."id" = 1  ORDER BY "admin_users"."id" ASC LIMIT 1] (pid:29655)
[DEBUG] [Province Load (0.2ms)  SELECT  "provinces".* FROM "provinces"  WHERE "provinces"."id" = $1 LIMIT 1  [["id", 5]]] (pid:29655)
[DEBUG] [ (0.1ms)  BEGIN] (pid:29655)
[DEBUG] [Region Load (0.3ms)  SELECT "regions".* FROM "regions"  WHERE "regions"."province_id" = $1  [["province_id", 5]]] (pid:29655)
[ERROR] [PG::SyntaxError: ERROR:  zero-length delimited identifier at or near """"
LINE 1: DELETE FROM "regions" WHERE "regions"."" = $1

最佳答案

您希望单引号不是空字符串周围的双引号,双引号可以用作分隔标识符,而“”不是有意义的标识符。

尝试:

WHERE 'regions'.'' = $1

或者至少:
WHERE "regions".'' = $1

关于postgresql - 错误:在 “”或附近的零长度分隔标识符“第1行:从 “regions”删除,在其中 “regions” .“” = $ 1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23165282/

10-11 03:10