为什么PostgreSQL告诉我架构不存在?

时间:2012-05-15 21:41:04

标签: ruby-on-rails unit-testing postgresql rake

我正在使用Rails的敏捷Web开发第7章(第4版),当我运行rake test:units时,我收到以下错误:

rake aborted!
PG::Error: ERROR: invalid value for parameter "search_path": "public" 
DETAIL: schema "public" does not exist
: SET search_path TO public

Tasks: TOP => db:test:load => db:test:purge
(See full trace by running task with --trace)

我使用的是OSX 10.7.4的MacBook Pro。我有Ruby 1.9.3,Rails 3.1.0,Rake 0.9.2.2和PostgreSQL 9.1。我的生产,开发和测试数据库都已存在,已迁移到我的config / database.yml文件中,并与名称,用户和密码相匹配。所有这些模式都是公开的。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:4)

确保您的用户默认数据库具有公共架构。

例如,如果您使用用户" postgres"连接到您的数据库,那么应该有一个名为" postgres"的数据库。使用名为" public"。

的模式

答案 1 :(得分:2)

来自http://www.postgresql.org/docs/9.1/static/infoschema-schemata.html(强调我自己):

  

视图架构包含当前数据库中当前启用的角色所拥有的所有架构

如果您与默认用户(postgres)以外的用户进行连接,则public架构可能不会显示。 (是的,即使该用户创建并拥有数据库,public架构也归postgres [1]所有。)

[1] http://archives.postgresql.org/pgsql-general/2008-10/msg01320.php

答案 2 :(得分:1)

根据错误消息,架构public不存在。你检查一下,它在那里吗?它只是另一种可以像其他模式一样删除的模式。