【问题标题】:No schema has been selected to create in ... error没有选择要创建的架构...错误
【发布时间】:2016-12-18 10:00:36
【问题描述】:

我正在使用托管在亚马逊服务器上的 Linux 服务器,并且我已经完全设置了服务器。我要做的最后一件事是托管我在 Flask 框架中的服务器上创建的旧项目之一。

我正在尝试运行用于设置运行我的项目所需的数据库的 Python 文件。

我在服务器中使用虚拟机来运行我的项目,每次运行命令时都会出现以下错误:

(venv) grader@ip-10-20-6-95:/var/www/catalog/catalog$ python setup_database.py
Traceback (most recent call last):
  File "setup_database.py", line 63, in <module>
    Base.metadata.create_all(engine)
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/schema.py", line 2848, in create_all
    tables=tables)
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1479, in _run_visitor
    conn._run_visitor(visitorcallable, element, **kwargs)
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1122, in _run_visitor
    **kwargs).traverse_single(element)
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py", line 122, in traverse_single
    return meth(obj, **kw)
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/engine/ddl.py", line 70, in visit_metadata
    self.traverse_single(table, create_ok=True)
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py", line 122, in traverse_single
    return meth(obj, **kw)
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/engine/ddl.py", line 89, in visit_table
    self.connection.execute(schema.CreateTable(table))
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 662, in execute
    params)
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 720, in _execute_ddl
    compiled
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 874, in _execute_context
    context)
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1024, in _handle_dbapi_exception
    exc_info
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 196, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb)
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 867, in _execute_context
    context)
  File "/var/www/catalog/venv/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 324, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (ProgrammingError) no schema has been selected to create in
 '\nCREATE TABLE users (\n\tid SERIAL NOT NULL, \n\tusername VARCHAR(100), \n\temail VARCHAR(225) NOT NULL, \n\tprofile_pic VARCHAR(225) NOT NULL, \n\tPRIMARY KEY (id)\n)\n\n' {}

我不确定为什么会出现此错误。
我运行来设置 PostgreSQL 的命令(如果这很重要的话):

$ sudo apt-get install libpq-dev python-dev
$ sudo apt-get install postgresql postgresql-contrib
$ sudo su - postgres
$ psql
# CREATE USER catalog WITH PASSWORD 'sillypassword';
# ALTER USER catalog CREATEDB;
# CREATE DATABASE catalog WITH OWNER catalog;
# \c catalog
# REVOKE ALL ON SCHEMA public FROM public;
# GRANT ALL ON SCHEMA public TO catalog;
# \q
$ exit

我该如何解决这个问题?

【问题讨论】:

    标签: python linux postgresql ubuntu search-path


    【解决方案1】:
    no schema has been selected to create in
    

    当您的search_path 设置没有有效的第一个条目(通常为空)时,您会收到此错误。 Postgres 不知道在哪个模式中创建表。

    修复您的 search_path 设置或模式限定对象名称(例如:public.users)。但是在任何情况下修复你的search_path
    详情:

    【讨论】:

    • 我在 cmets 中读到有人刚刚输入了 RESET search_path。在我的情况下会起作用吗
    • 所以基本上是在阅读了链接的页面之后。我基本上可以使用ALTER DATABASE test SET search_path = blarg,public; 更改权限并将 blarg 替换为目录。我应该运行以下代码..SET search_path = blarg,public; 并替换 blarg 目录..
    • @Omar_Jandali:这取决于您的环境。默认设置是为整个数据库集群(并重新加载)在postgresql.conf 中设置默认search_path。但是,如果您想要每个用户/数据库/用户和数据库/会话组合等的单独设置,您需要相应的设置。您的问题似乎是您目前根本没有有效的search_path
    • 这样。我创建了一个名为 catalog 的用户,我用它设置了所有 postgres 设置。所以我可以简单地运行以下命令,它会运行SET search_path = catalog,public 或者我该如何解决没有有效搜索路径的问题
    • @Omar_Jandali:是的,它为当前会话设置了search_path。链接的答案有详细的说明。
    【解决方案2】:

    这个问题已经回答了:https://dba.stackexchange.com/a/275116/114247

    解决方法是:

    grant usage on schema public to public;
    grant create on schema public to public;
    

    【讨论】:

    • 这个对我有用。显然我重新创建了 public 架构并忘记授予访问权限。
    【解决方案3】:

    您没有创建架构。使用CREATE SCHEMA public; 创建架构 然后你可以执行grant usage on schema public to public;grant create on schema public to public

    【讨论】:

      【解决方案4】:

      我发现pg_dump(在postgres 10.7下)创建的文件有

      SELECT pg_catalog.set_config('search_path', '', false);
      

      靠近它的顶部。因此,在导入文件时,它操纵了搜索路径,该路径在当前会话中持续存在。

      注释掉该行(并开始一个新会话)解决了这个问题。

      【讨论】:

      • 谢谢。这是我的问题。
      猜你喜欢
      • 2018-04-29
      • 2015-01-27
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多