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?
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:
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.