2016-11-16 2 views
0

В настоящее время я используюСоздания PostgreSQL базы данных без корневых привилегий

$ sudo service postgresql start  

запустить сервер PostgreSQL и

$ sudo -u postgres createdb testdb --owner ownername 

для создания базы данных. Однако эти команды нуждаются в привилегии root. Как я могу сделать это без привилегий root/sudo в Linux (Ubuntu)?

+0

Если вы хотите запустить систему, вам понадобится root. Но вы можете запустить Postgresql локально под своей учетной записью пользователя. И 'createdb' не нужен root (либо доступ к Postgres как пользователю admin Postgres, который может выполнять любой пользователь ОС или даже удаленный пользователь) – Thilo

+0

@Thilo Можете ли вы объяснить, как запустить Postgresql локально? – JHu

ответ

5

Вы можете запустить PostgreSQL без привилегий root, создав новый экземпляр (который PostgreSQL вызывает «кластер») и запускает его.

Вы не можете использовать скрипты инициализации Ubuntu, инструменты обертки, такие как pg_ctlcluster и т. Д., Если вы это сделаете. Вы должны использовать только собственные инструменты PostgreSQL.

Чтобы создать новый экземпляр PostgreSQL с суперпользователем равного имени пользователя, каталог данных в вашем домашнем каталоге, и md5 аутентификация включены по умолчанию, использование:

initdb -D $HOME/my_postgres -A md5 -U $USER 

Регулировка по желанию; см. initdb --help.

Затем вы должны отредактировать postgresql.conf, чтобы изменить port на нестандартный, поскольку ваша система, вероятно, запускает собственные postgres на порт по умолчанию 5432. (Если вы хотите ограничить доступ строго к вам, вы можете вместо того, чтобы установить listen_addresses = '' и unix_socket_directories = /home/myuser/postgres_socket или что-то Но это проще просто использовать другой порт)

чтобы запустить его:..

pg_ctl -D $HOME/my_postgres -w start 

чтобы подключиться к нему, укажите порт, который вы выбрали:

psql -p 5434 ... 

(Если вы изменили unix_socket_directories вы также хотите, чтобы указать путь, который вы дали, как -h /home/myuser/postgres_socket.)

Чтобы psql и т.д. подключиться к Postgres по умолчанию, редактировать ~/.bashrc добавить что-то вроде

export PGPORT=5434 

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

Чтобы остановить его:

pg_ctl -D $HOME/my_postgres -w stop 

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

Чтобы автозапуск, когда вы входите в систему, когда он настроен в вашем домашнем каталоге, вам придется использовать функции запуска на рабочем столе. Они меняются в зависимости от окружающей среды и версии, поэтому я не могу дать подробностей здесь; он отличается от GNOME 3, Unity (ubuntu), KDE, XFCE и т. д.

Обратите внимание, что этот подход по-прежнему использует системы пакеты для PostgreSQL. Это важно, потому что если вы удалите (скажем) PostgreSQL 9.4 и установите 9.6, ваша копия в домашнем каталоге перестанет работать.Если вы хотите, чтобы он полностью не зависел от системных пакетов, как вы, вероятно, делаете, если не контролируете систему, вы должны скомпилировать PostgreSQL из источника или использовать двоичный установщик для установки внутри своего домашнего каталога.

Смежные вопросы