PG ::错误:错误:在""""""""""""""

时间:2015-08-13 21:17:35

标签: ruby-on-rails postgresql activerecord

我刚刚在我的本地postgres数据库中对pg_restore进行了转储数据库的转储,以使它们排成一行。所有数据都已通过。

现在,当我尝试在Rails控制台中查询时,我收到了错误。

Artist.count
   (0.5ms)  SELECT COUNT(*) FROM "artists" 
=> 668

**

Artist.last
  Artist Load (1.4ms)  SELECT "artists".* FROM "artists" ORDER BY "artists"."" DESC LIMIT 1
PG::Error: ERROR:  zero-length delimited identifier at or near """"
LINE 1: ...T  "artists".* FROM "artists"  ORDER BY "artists"."" DESC LI...
                                                             ^
: SELECT  "artists".* FROM "artists"  ORDER BY "artists"."" DESC LIMIT 1
ActiveRecord::StatementInvalid: PG::Error: ERROR:  zero-length delimited identifier at or near """"
LINE 1: ...T  "artists".* FROM "artists"  ORDER BY "artists"."" DESC LI...
                                                             ^
: SELECT  "artists".* FROM "artists"  ORDER BY "artists"."" DESC LIMIT 1
from /Users/ryanrebo/.rvm/gems/ruby-2.0.0-p481/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:1161:in `exec'

我在所有其他模型上都遇到了同样的错误。我也不能使用find(id)

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

我通过删除然后重新创建本地数据库,重新运行迁移以及在--data-only上作为选项传递pg_restore来解决此问题。 谢谢你们的帮助。这是一个奇怪的错误。

答案 1 :(得分:5)

错误的发生是因为"艺术家" table没有用于订单的主键:

  

艺术家负荷(1.4ms)SELECT"艺术家"。* FROM"艺术家"订购#34;艺术家"。"" DESC LIMIT 1

通过将以下代码块添加到rails迁移或在数据库中运行alter table命令来添加要修复的主键:

  

执行<< -SQL    ALTER TABLE assets ADD PRIMARY KEY(id);   SQL

其中id是"艺术家"。

的主键

答案 2 :(得分:0)

你所做的是有点补丁。当你有转储时,这不是你想要做的。你应该运行

1)rake db:drop

2)rake db:create

3)使用pg_restore转储数据,不需要--data-only