Postgres15 Предоставить все на общедоступной схеме не работает

Раньше мой код работал нормально с Postgres 12, теперь с Postgres 15 мой проект Django не может выполнять миграцию. Я нашел много ответов, предлагающих GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO <user>, но у меня это не работает, как показано ниже.

Это ошибка, которую я получаю:

lib/python3.11/site-packages/psycopg/cursor.py", line 732, in execute
    raise ex.with_traceback(None)
psycopg.errors.InsufficientPrivilege: permission denied for schema public
LINE 1: CREATE TABLE "django_migrations" ("id" smallint NOT NULL PRI...

Ниже пользователь с именем django должен иметь возможность создавать таблицы в схеме public, чтобы он мог выполнять миграцию:

sudo -u postgres psql
could not change directory to "/home/john/project/src": Permission denied
psql (15.6 (Debian 15.6-0+deb12u1))
Type "help" for help.

postgres=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO django;
GRANT
postgres=# 
\q

(project) john@vps-demo:~/project/src$ psql -U django my_db
Password for user django: 
psql (15.6 (Debian 15.6-0+deb12u1))
Type "help" for help.

my_db=> CREATE TABLE test_table1 (id INT);
ERROR:  permission denied for schema public
LINE 1: CREATE TABLE test_table1 (id INT);
                     ^
my_db=> 

И проверка разрешений:

User
# sudo -u postgres psql -c "\dn+ public"
could not change directory to "/home/john/project/install": Permission denied
                                       List of schemas
  Name  |       Owner       |           Access privileges            |      Description       
--------+-------------------+----------------------------------------+------------------------
 public | pg_database_owner | pg_database_owner=UC/pg_database_owner+| standard public schema
        |                   | =U/pg_database_owner                  +| 
        |                   | django=UC/pg_database_owner           +| 
        |                   | john=UC/pg_database_owner          | 
(1 row)
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
273
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы предоставляете django все разрешения для общедоступной схемы/пространства имен в базе данных «postgres», а не для базы данных/каталога «my_db».

В первой команде вы входите в базу данных/каталог postgres. Во втором вы пытаетесь создать таблицу в базе данных/каталоге «my_db».

Итак, если вы хотите предоставить «django» доступ к «my_db», вам необходимо:

  1. Найдите владельца базы данных. Что вы можете сделать с помощью \l в psql
  2. Войдите в эту учетную запись (или учетную запись, которая имеет возможность предоставлять все привилегии, которые вы хотите предоставить. Но остерегайтесь наследования привилегий и того, как оно работает/используйте роль)
  3. Подключитесь к «my_db» с помощью \c "my_db"
  4. И повторно запустите исходную команду

Также в качестве примечания, если «django» должен быть единственным пользователем базы данных/каталога, он также может сделать его владельцем.

БОЛЬШОЕ СПАСИБО!! Я боролся с этим часами. Ты великое благословение, посланное Богом! Для всех, кто это записывает, вы можете сделать что-то вроде: cmd_list = ['sudo', '-S', '-u', 'postgres', '-i', 'psql', '-d', db_name, '-c', command], то есть -d, чтобы указать имя БД при предоставлении всех привилегий.

run_the_race 15.03.2024 10:41

Пожалуйста, парень, получай удовольствие от написания сценариев :3

Ianis 15.03.2024 13:40

Другие вопросы по теме