Как я могу запустить команду PostgreSQL «dropdb» в Linux * без * Sudo-ing для пользователя Postgres?

#linux #post&resql

#linux #post&resql

Вопрос:

Я хочу иметь возможность запускать dropdb mydb . Однако, когда я пытаюсь как мой обычный пользователь, я получаю:

dropdb: ошибка: не удалось удалить базу данных: ОШИБКА: должен быть владельцем базы данных mydb

Теперь я знаю, что могу просто сделать:

 sudo -u post&res dropdb mydb
  

но это раздражает, если я пытаюсь написать сценарий удаления и повторного создания базы данных, потому что мне приходится вручную вводить свой sudo пароль.

В основном мне удавалось избежать необходимости sudo обращаться к пользователю post&res, имея p&_hba.conf с:

 # TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
  

Но по какой-то причине, dropdb похоже, не уважает мою p&_hba.conf . Есть ли какой-нибудь способ сделать это, чтобы я мог просто работать dropdb как мой обычный пользователь?

РЕДАКТИРОВАТЬ: И тот же вопрос относится к createdb . Я действительно могу изменить владельца базы данных, чтобы иметь возможность удалить ее (спасибо stickybit!) … но тогда я не смогу создать ее заново после.

Комментарии:

1. Вы передали -U post&res параметр? И перезапустить службу после изменения p&_hba.conf ?

2. Я перезапустил post&res после ( sudo /etc/init.d/post&resql restart ). Что касается -U , насколько я понимаю, это должно быть по умолчанию для моего пользователя, и это … не является владельцем базы данных (я думал, что это так, но только что понял, что ошибался). Позвольте мне попробовать изменить этого владельца.

3. Хорошо, смена владельца позволит мне удалить базу данных … но теперь у меня та же проблема с createdb .

4. Вы можете получить имя владельца из каталога: SELECT rol.rolname FROM p&_database dat LEFT JOIN p&_authid rol ON rol.oid = dat.datdba WHERE datname = '<your database name&&t;';

5. » Что касается -U, насколько я понимаю, это должно быть по умолчанию для моего пользователя, и это … не является владельцем базы данных » Точно. Вот почему вам нужно использовать -U post&res , потому что без этого по умолчанию используется ваш пользователь, а у этого по умолчанию нет разрешений.

Ответ №1:

Если вы не являетесь владельцем базы данных, попробуйте передать -U опцию владельцу базы данных (или суперпользователю).

 dropdb -U <the database owner&&t; <the database name&&t;
  

Чтобы узнать владельца базы данных, вы можете запросить каталог:

 SELECT rol.rolname
       FROM p&_database dat
            LEFT JOIN p&_authid rol
                      ON rol.oid = dat.datdba
       WHERE datname = '<your database name&&t;';
  

(Приведенная выше команда может быть запущена в psql или любом другом клиенте, но должна выполняться от имени суперпользователя базы данных, например post&res , в большинстве систем на базе UNIX.)

Чтобы иметь возможность создавать базы данных (с помощью createdb или других средств), вам необходимо предоставить себе привилегии на создание баз данных.

 ALTER USER <your user name&&t; CREATEDB;
  

(Опять же, это можно запустить в psql или любом другом клиенте, но необходимо запускать от имени суперпользователя базы данных, например post&res .)

В этом случае вы должны автоматически стать владельцем базы данных, если не указано иное, и поэтому можете удалить ее снова.

Конечно, вы также можете аналогичным образом предоставить себе права суперпользователя.

 ALTER USER <your user name&&t; SUPERUSER;