Must be the owner of the django_site relationship when manage.py migrate

After a long search about postgre, about manage.py killorphant, about django_site, nothing could help me with this error:

Synchronizing apps without migrations: Creating tables... Installing custom SQL... Installing indexes... Running migrations: Applying sites.0002_auto_20150929_1444...Traceback (most recent call last): **File "/var/www/webapps/lib/python3.4/site-packages/django/db/backends/utils.py", line 65, in execute return self.cursor.execute(sql, params) psycopg2.ProgrammingError: must be owner of relation django_site** 

The above exception was the direct cause of the following exception:

 Traceback (most recent call last): File "./manage.py", line 11, in <module> execute_from_command_line(sys.argv) File "/var/www/webapps/lib/python3.4/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line utility.execute() File "/var/www/webapps/lib/python3.4/site-packages/django/core/management/__init__.py", line 377, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/var/www/webapps/lib/python3.4/site-packages/django/core/management/base.py", line 288, in run_from_argv self.execute(*args, **options.__dict__) File "/var/www/webapps/lib/python3.4/site-packages/django/core/management/base.py", line 338, in execute output = self.handle(*args, **options) File "/var/www/webapps/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 161, in handle executor.migrate(targets, plan, fake=options.get("fake", False)) File "/var/www/webapps/lib/python3.4/site-packages/django/db/migrations/executor.py", line 68, in migrate self.apply_migration(migration, fake=fake) File "/var/www/webapps/lib/python3.4/site-packages/django/db/migrations/executor.py", line 102, in apply_migration migration.apply(project_state, schema_editor) File "/var/www/webapps/lib/python3.4/site-packages/django/db/migrations/migration.py", line 108, in apply operation.database_forwards(self.app_label, schema_editor, project_state, new_state) File "/var/www/webapps/lib/python3.4/site-packages/django/db/migrations/operations/fields.py", line 139, in database_forwards schema_editor.alter_field(from_model, from_field, to_field) File "/var/www/webapps/lib/python3.4/site-packages/django/db/backends/schema.py", line 470, in alter_field self._alter_field(model, old_field, new_field, old_type, new_type, old_db_params, new_db_params, strict) File "/var/www/webapps/lib/python3.4/site-packages/django/db/backends/schema.py", line 642, in _alter_field self.execute(self._create_unique_sql(model, [new_field.column])) File "/var/www/webapps/lib/python3.4/site-packages/django/db/backends/schema.py", line 111, in execute cursor.execute(sql, params) File "/var/www/webapps/lib/python3.4/site-packages/django/db/backends/utils.py", line 81, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "/var/www/webapps/lib/python3.4/site-packages/django/db/backends/utils.py", line 65, in execute return self.cursor.execute(sql, params) File "/var/www/webapps/lib/python3.4/site-packages/django/db/utils.py", line 94, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/var/www/webapps/lib/python3.4/site-packages/django/utils/six.py", line 658, in reraise raise value.with_traceback(tb) File "/var/www/webapps/lib/python3.4/site-packages/django/db/backends/utils.py", line 65, in execute **return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: must be owner of relation django_site** 

So, after checking and re-checking, the django site is in the list of installed applications, site_id = 1 ; my database works, except for some image problems. Well, then I tried to perform some migrations, but this error continues to work, and now I am desperately trying to find the problem.

Does anyone know about this?

+18
source share
2 answers

The database user that you use for django to connect to the database does not own the table. You need to change it on the postgres shell or perhaps help pgadmin3.

Sort of:

 ALTER DATABASE your_db OWNER TO your_django_db_user ALTER TABLE django_site OWNER TO your_django_db_user 
+28
source

In my case, I want to change all table owners to db_user , so I followed the script below to change all table owners to db_user .

Open your shell

 sudo -s -u postgres 

for multiple databases:

 export user="db_user" export dbs="db1 db2" 

then

 for db in $dbs; do psql -c "alter database $db owner to $user" $db; done for db in $dbs; do psql -c "alter schema public owner to $user" $db; done for db in $dbs; do tables='psql -qAt -c "select tablename from pg_tables where schemaname = 'public';" $db' for tbl in $tables; do psql -c "alter table \"$tbl\" owner to $user" $db; done; done for db in $dbs; do seqs='psql -qAt -c "select sequence_name from information_schema.sequences where sequence_schema = 'public';" $db' for seq in $seqs; do psql -c "alter table \"$seq\" owner to $user" $db ; done; done for db in $dbs; do views='psql -qAt -c "select table_name from information_schema.views where table_schema = 'public';" $db' for view in $views; do psql -c "alter table \"$view\" owner to $user" $db ; done; done 

Then migrate

 python manage.py migrate 

link to source link

+3
source

Source: https://habr.com/ru/post/1233769/


All Articles