Подтвердить что ты не робот

Попытка установить Postgres в моей среде, но, похоже, не может получить разрешения на intidb

Я слежу за недавним RailsCast при настройке PostgreSQL, но я не могу запустить команду initdb /usr/local/var/postgres. Каждый раз, когда я запускаю его, я получаю эту ошибку:

The files belonging to this database system will be owned by user "Construct".
This user must also own the server process.

The database cluster will be initialized with locale en_US.UTF-8.
The default database encoding has accordingly been set to UTF8.
The default text search configuration will be set to "english".

creating directory /usr/local/var/postgres ... initdb: could not create directory "/usr/local/var": Permission denied
4b9b3361

Ответ 1

Это должно работать нормально:

# sudo mkdir /usr/local/var/postgres
# sudo chmod 775 /usr/local/var/postgres
# sudo chown construct /usr/local/var/postgres
# initdb /usr/local/var/postgres

используйте имя пользователя вместо конструкции. Итак, если ваше имя пользователя компьютера WDurant, код будет:

# sudo chown wdurant /usr/local/var/postgres

Ответ 2

Если вы работаете на Arch Linux, используйте так:

sudo mkdir /var/lib/postgres
sudo chmod 775 /var/lib/postgres
sudo chown postgres /var/lib/postgres

sudo -i -u postgres

[postgres]$ initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'
[postgres]$ exit

sudo systemctl start postgresql.service

sudo -i -u postgres

Ответ 3

Вам действительно нужно SU пользователю postgres

  • sudo su - postgres

то вы можете запустить команду

  • initdb -E UTF8 (Я предпочитаю установить это сейчас, потому что UTF8 довольно гибкий, и это создаст все кластеры как UTF8 [если вы явно не указали иначе])

тогда вам нужно создать своего пользователя (если он еще не был создан)

  • $ createuser -s -U postgres
  • $ Enter name of role to add: {{ my login name }} (это выглядит как Construct)

тогда вы можете выйти из пользователя postgres, и вы можете создать свою собственную базу данных

  • $ createdb

Ответ 4

Какой пользователь вы запускаете initdb как? Если вы не root, у вас, вероятно, нет разрешения на создание каталогов в /usr/local. Я предлагаю создать /usr/local/var/postgres как root и chown'ing его для построения:

# mkdir -m 0700 -p /usr/local/var/postgres
# chown construct /usr/local/var/postgres

Тогда ваш initdb (run as construct) должен иметь разрешение.

Также обратите внимание, что имена пользователей Unix обычно являются строчными (но также чувствительными к регистру); вы уверены, что ваш пользователь Construct фактически капитализирован? Если это так, вы действительно уверены, что хотите, чтобы он был заглавным - многие вещи сломаются.

(FYI: для таких вопросов Unix вы можете найти Unix.SE или Спросить Ubuntu. более быстрые ответы)