Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
pycharme/python manage.py migrate
Salut, je bute sur un probleme concernant la commande migrate vers ma base de données postgre sql . j'ai reussi a operer la commande python manage.py makemigrations sans erreur, ma base de donées est bien configurer , j'ai modifier mes parametres dans mon fichier settings.py pour renvoyer vers mais la c gros beug il me renvois un paquet d'erreur . si vous pouviez eclairer mes lumieres , ca serais cool :).. a vous lire rv
Operations to perform: Apply all migrations: admin, auth, contenttypes, posts, sessions Running migrations: Traceback (most recent call last): File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\backends\utils.py", line 87, in _execute return self.cursor.execute(sql) ^^^^^^^^^^^^^^^^^^^^^^^^ psycopg2.errors.InsufficientPrivilege: ERREUR: droit refusé pour le schéma public LINE 1: CREATE TABLE "django_migrations" ("id" bigint NOT NULL PRIMA... ^
The above exception was the direct cause of the following exception:
Traceback (most recent call last): File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\migrations\recorder.py", line 70, in ensure_schema editor.create_model(self.Migration) File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\backends\base\schema.py", line 451, in create_model self.execute(sql, params or None) File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\backends\postgresql\schema.py", line 45, in execute return super().execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\backends\base\schema.py", line 201, in execute cursor.execute(sql, params) File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\backends\utils.py", line 102, in execute return super().execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\backends\utils.py", line 67, in execute return self._execute_with_wrappers( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers return executor(sql, params, many, context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\backends\utils.py", line 84, in _execute with self.db.wrap_database_errors: File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\utils.py", line 91, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\backends\utils.py", line 87, in _execute return self.cursor.execute(sql) ^^^^^^^^^^^^^^^^^^^^^^^^ django.db.utils.ProgrammingError: ERREUR: droit refusé pour le schéma public LINE 1: CREATE TABLE "django_migrations" ("id" bigint NOT NULL PRIMA... ^
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\hflan\webprojets\blogsite\django_blog1\src\manage.py", line 22, in <module>
main()
File "C:\Users\hflan\webprojets\blogsite\django_blog1\src\manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\core\management__init__.py", line 442, in execute_from_command_line
utility.execute()
File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\core\management__init__.py", line 436, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\core\management\base.py", line 412, in run_from_argv
self.execute(args, cmd_options)
File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\core\management\base.py", line 458, in execute
output = self.handle(args, options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\core\management\base.py", line 106, in wrapper
res = handle_func(*args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\core\management\commands\migrate.py", line 356, in handle
post_migrate_state = executor.migrate(
^^^^^^^^^^^^^^^^^
File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\migrations\executor.py", line 107, in migrate
self.recorder.ensure_schema()
File "C:\Users\hflan\webprojets\blogsite\django_blog1.env\Lib\site-packages\django\db\migrations\recorder.py", line 72, in ensure_schema
raise MigrationSchemaMissing(
django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table (ERREUR: droit refusé pour le schéma public
LINE 1: CREATE TABLE "django_migrations" ("id" bigint NOT NULL PRIMA...
</module>
Hello,
désolé un peu compliqué à lire sans le formatage. Est ce que tu as bien fait un python manage.py migrate
?
oui aucun soucis au niveau de l'environement virtuel , pas d'erreur dans le code, python manage makemigrtations a bien lancer la migration, postgres est bien parametrer, la base est bien realiser et je l'ai parametrer dans mon setting j'etudie avec la version de python 3.11. je parcours les docs en recherche d'info sur le sujet pour comprendre .
Salut Hervé !
À première vue, le message d'erreur indique "droit refusé pour le schéma public", ce qui me fait penser à un problème de droits d'accès à ta base de données PostgreSQL. Il me semble qu'un autre étudiant avait rapporté ce probleme egalement sur un version recente de postgres.
Possible qu'il y ait deux causes :
1) L'utilisateur que tu utilises pour te connecter à la base de données ne dispose pas des droits nécessaires pour créer des tables. Il faut que tu vérifies si l'utilisateur dispose des droits "CREATE" sur le schéma public de ta base de données.
2) Il est aussi possible que l'utilisateur ne soit pas propriétaire du schéma public.
Pour corriger cela, tu peux te connecter à PostgreSQL en tant que superuser ou un utilisateur ayant des drois d'administrateur et exécuter les commandes suivantes :
GRANT ALL PRIVILEGES ON DATABASE ma_base TO mon_user;
GRANT ALL ON SCHEMA public TO mon_user;
Remplace "ma_base" par le nom de ta base de données et "mon_user" par le nom de ton utilisateur.
Et après ça reessaie ta commande de migration. Tiens-nous au courant!
En retour a ton message thibault, j'ai fais les manip j'ai bien les droits d'accés enregistré , il indique grant pour la commande GRANT ALL SCHEMA ..... mais ca me renvoie qd meme la meme erreur . j'en profite pour une autre question sur l'encodage pour que j'ecarte la piste de mes doutes , j'ai ce message sur ma console a l'ouverture : : l'encodage console (850) diffère de l'encodage Windows (1252). Les caractères 8 bits peuvent ne pas fonctionner correctement. Voir la section « Notes aux utilisateurs de Windows » de la page référence de psql pour les détails. n'y a t'il pas d'incidence en sachant que je suis parametrer en 'utf8'?
postgres=# GRANT ALL PRIVILEGES ON DATABASE blog TO blogadmin; GRANT postgres=# \l
Liste des bases de donnÚes
Nom | PropriÚtaire | Encodage | Fournisseur de locale | Collationnement | Type caract. | Locale ICU | RÞgles ICU : | Droits d'accÞs
-----------+--------------+----------+-----------------------+--------------------+--------------------+------------+--------------+------------------- blog | postgres | UTF8 | libc | French_France.1252 | French_France.1252 | | | =Tc/postgres + | | | | | | | | postgres=CTc/postgres + | | | | | | | | blogadmin=CTc/postgres
postgres=# GRANT ALL ON SCHEMA public TO blogadmin; GRANT
postgres=# \l
Salut Hervé et désolé pour le délai de réponse !
C'est possible que l'encodage ait une influence, vu que Python fait du UTF-8 par défaut, et ton PostgreSQL est en French_France.1252
. Cela pourrait causer des soucis quand Django essaie de communiquer avec la base.
Cela dit, ça ne devrait en principe pas influencer sur les permissions d'accès lors de la création d'une table.
As-tu essayé d'exécuter la commande python manage.py migrate
directement en tant que superuser Postgres ? Django utilise normalement l'utilisateur que tu as défini dans tes settings.py, mais il est possible de changer ça temporairement pour débloquer la situation. Juste au cas où ton user 'blogadmin' ait encore des problèmes de droits non résolus.
Pour le faire, tu peux modifier ton settings.py et remplacer ton 'blogadmin' par 'postgres' (ou le nom de ton superuser), juste pour tester. N'oublie pas de le remettre après.
Concernant l'encodage, il serait préférable de créer ta base de données avec l'encodage UTF8 pour éviter des problèmes à l'avenir. Tu peux faire ça avec la requête SQL suivante :
CREATE DATABASE mydatabase WITH ENCODING 'UTF8' LC_COLLATE='en_US.utf8' LC_CTYPE='en_US.utf8' TEMPLATE=template0;
Ça nous permettra de mieux identifier d'où vient le problème (si cest au niveau de l'utilisateur ou de la base).
salut thibault, c'est bien au niveau de l'utilisateur que j'ai un probleme , j'ai effectué la manoeuvre via postgres tous est ok , je vais donc supprimer la base pour la reediter et voir ce que ca donne en prenant en compte l'encodage en 'utf8' , et voir si ca me cause encore ce probleme . merci pour les reponses apportés . Hervé.
Depuis ce matin je "m"amuse" a tester et a trouver l'erreur et je commence a m'arracher les cheveux avec je m'explique j'ai d'abord supprimer ma base et mon utilisateur egalement que j'ai recreer et j'ai modifier l'encodage comme ceci : CREATE DATABASE mydatabase WITH ENCODING 'UTF8' LC_COLLATE='en_US.utf8' LC_CTYPE='en_US.utf8' TEMPLATE=template0; j'ai recreer un utilisateur a qui j'ai donner les plein pouvoir et je l'ai bien rataacher a ma base ce qui nous donne : NOM Proprietaire encodage fournisseur de local collationnement type de caractere local icu rpgles icu : droit d'acces blog postgres UTF8 libc en_US.utf8 en_US.utf8 =TC/postgres + postgres= CTc/postgres+ herve=CTc/postgres la tu te dit tous est ok , ca va balancer , tu file dans ton setting tu modifie ce qui doit et tu lance la commande python manage.py migrate
ET LA TU BEUG parce qu'il ne veux absolument rien savoir, il plante , meme message d'erreur .
j'ai meme desinstaller postgress pour le reinstaller au cas ou , mais ca ne change rien .
Maintenant quand je fais la migration avec Postgres en utilisateur , je n'ai pas ce soucis .
de ce que je comprend vu que je debute et que je suis loin de maitriser , pour moi postgress bloque automatiquement tous les utilisateurs , est ce que cela pourrais venir du fait que j'utilise la toute derniere version de postgress a savoir : postgresql-16rc18WINDOWS-x64 et qu'il faut que je creer un super utilisateur et non un utilisateur , ce qui me demande a te demander comment creer un nouveau super utilsateur dans postgres .
et ensuite comment puis je changer l'encodage pour postgres car du coup ma base est bien en utf8 , mais postgres lui est tjr en french_france.1252 . qd je visione les videos on voit bien que sur tes exemples tous est en utf8 alors que moi voila ce que ca donne
Nom | PropriÚtaire | Encodage | Fournisseur de locale | Collationnement | Type caract. | Locale ICU | RÞgles ICU : | Droits d'accÞs
blog | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | =Tc/postgres +
| | | | | | | | postgres=CTc/postgres+
| | | | | | | | herve=CTc/postgres
postgres | postgres | UTF8 | libc | French_France.1252 | French_France.1252 | | |
template0 | postgres | UTF8 | libc | French_France.1252 | French_France.1252 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | libc | French_France.1252 | French_France.1252 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
je vais chercher les info si jamais je trouve je publie mais la j'avoue que je nage a contre courant , help .
Bonjour Hervé !
Je reviens vers toi après avoir relu toute la conversation. Déjà si tu as toujours la même erreur concernant les droits et permissions sur le schéma public, je pense qu'on peut définitivement écarter le problème d'encodage. Ça ne devrait pas te poser de problèmes (ou alors à la marge, pour des opérations de tri par exemple en fonction des caractères présents dans ta base de données, mais en aucun cas un problème sur les droits de permission).
Pour créer un super utilisateur tu peux utiliser cette commande :
CREATE USER monuser WITH SUPERUSER PASSWORD 'monpassword';
Un truc qui me vient à l'esprit aussi : as-tu par hasard plusieurs fichiers de settings et / ou, es-tu sûr que ton fichier est correctement lu ? Par exemple si tu utilises un fichier d'environnement pour lire le nom d'utilisateur et le mot de passe pour ta base de données, le problème pourrait aussi venir de là (par exemple s'il lit un ancien fichier ou le mauvais, ou un fichier en cache, bref, il peut y avoir plein de raisons, mais je pense que c'est quelque chose qu'on pourrait regarder aussi pour l'écarter. Histoire de ne pas chercher dans la mauvaise direction pendant trop longtemps si finalement le problème vient de là 😄).
Courage, on va trouver !
Inscris-toi
(c'est gratuit !)

Tu dois créer un compte pour participer aux discussions.
Créer un compte person