web-dev-qa-db-fra.com

aucun schéma n'a été sélectionné pour créer dans ... erreur

Je travaille sur un serveur Linux hébergé sur le serveur Amazon et j'ai complètement configuré le serveur et la dernière chose que j'essaie de faire est d'héberger l'un de mes anciens projets que j'ai créés sur le serveur qui est en Flask Framework.

J'essaie d'exécuter le fichier python qui configure ma base de données qui est nécessaire pour exécuter mon projet.

J'utilise une machine virtuelle à l'intérieur du serveur qui exécutera mon projet et chaque fois que j'exécute la commande, j'obtiens l'erreur suivante:

(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' {}

Je ne sais pas pourquoi j'obtiens cette erreur.
Les commandes que j'ai exécutées pour configurer PostgreSQL (si cela importe):

$ 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

Comment résoudre ce problème?

8
Omar_Jandali
no schema has been selected to create in

Vous obtenez cette erreur lorsque votre search_path le paramètre n'a pas de première entrée valide (généralement vide). Postgres ne sait pas dans quel schéma créer la table.

Réparez votre search_path paramètre ou nom d'objet qualifié par le schéma (comme: public.users). Mais corrigez votre search_path dans tout cas.
Détails:

10
Erwin Brandstetter

J'ai trouvé le fichier créé par pg_dump (sous postgres 10.7) avait

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

près du sommet. Ainsi, lors de l'importation du fichier, il a manipulé le chemin de recherche, qui a persisté tout au long de la session en cours.

Commenter cette ligne (et démarrer une nouvelle session) a résolu le problème.

1
Randall