7

Шаг 1: Я установил PostgreSQL с помощью sudo apt-get install postgresql-9.1 как рекомендовано на сайте PostgreSQL

Шаг 2: Я пытался запустить postgres . Это не найдено. По какой-то причине установка не добавляет его в путь? Поэтому мне пришлось вручную добавить строку export PATH=$PATH:/usr/lib/postgresql/9.1/bin в конец моего ~/.profile . (Sidenote: Кто-нибудь знает, почему это необходимо? Я делаю что-то не так с установкой? Все остальное, что я установил в Ubuntu, "просто работает" без изменения $PATH ...)

Шаг 3: Я пытаюсь запустить initdb /usr/local/var/postgres . Доступ запрещен. Я пытаюсь запустить sudo initdb /usr/local/var/postgres . Результат sudo: initdb: command not found . Как эта команда не найдена? Я просто проклял эту чертову штуку! echo sudo $PATH показывает каталог PostgreSQL в пути ... что мне не хватает?

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

ОБНОВЛЕНИЕ: я полагаю, что это связано с этим вопросом. Однако, выполнив команду с sudo -i не решает проблему. Я просто получаю: -bash: initdb: command not found . Отлично.

ОБНОВЛЕНИЕ: Это кажется еще ближе. Поэтому я добавил alias sudo='sudo env PATH=$PATH' в мой .bashrc в соответствии с инструкциями. Все еще не работает! Похоже, псевдоним не работает. Когда я запускаю alias , я показываю только один. И все же мой .bashrc полон их ... так что что-то не так с теми, кто настраивается.

ОБНОВЛЕНИЕ: Поскольку я использую Ubuntu и RVM, RVM рекомендовал настроить терминал на "Запускать команду в качестве оболочки входа в систему". Судя по чтению, которое я сделал здесь, кажется, что файл .bashrc не читается в оболочке входа, только профиль. Поэтому я переместил строку alias из .bashrc в .profile , так что .profile теперь имеет в конце:

export PATH="/usr/lib/postgresql/9.1/bin:$PATH"
alias sudo='sudo env PATH=$PATH'

... и это все еще не работает. Запуск alias показывает только псевдоним RVM, но не псевдоним sudo который я пытался настроить.

ОБНОВЛЕНИЕ С этого сайта я прочитал о приоритете дотфайлов. Похоже, что .bash_profile предшествует .profile . При этом, мои добавления PATH были сделаны в .profile и, похоже, были загружены просто отлично, так почему же alias также не работает? Однако перемещение alias в .bash_profile из .profile сработало. Тайна. Итак, команда alias показывает мой новый псевдоним. Наконец, я sudo initdb /usr/local/var/postgres , чтобы встретиться с: initdb: cannot be run as root . Да неужели? Тогда почему вы даете мне ошибки разрешения?! Итак, теперь я думаю, что проблема в том, что мне просто нужно chown папку, но при этом запустить initdb как мой пользователь, а не как root .

ОБНОВЛЕНИЕ Выполнение команды sudo chown myuser /usr/local/var/postgres/ , а затем запуск initdb впоследствии позволили инициализировать базу данных. Рад, что было так очевидно, что права доступа к каталогу нужно было установить как myuser, а не как root. Невероятный. Успешная инициализация базы данных через 4 часа.

4 ответа4

9

После того, как вы установили сервер PostgreSQL с помощью apt-get install postgresql-9.1 , он уже настроен и запущен, поэтому ваши шаги № 2 и № 3 (запустить postgres и запустить initdb) не нужны и фактически будут конфликтовать с тем, что уже был создан. Запустив вручную initdb вы получите два кластера postgres.

Пакеты postgresql для Debian и Ubuntu предоставляют команду с именем pg_createcluster, которая находится в /usr/bin и которую вы можете вызвать, если вам потребуется создать новый кластер. Под капотом эта команда вызовет initdb с правильными параметрами. Конечный пользователь не должен вызывать initdb напрямую, поэтому он не находится в обычном PATH. Существуют также другие команды, такие как pg_dropcluster и pg_ctlcluster, которые заменяют способы администрирования неупакованного экземпляра PostgreSQL.

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

6

Когда вы запускаете sudo, лучше всего указать полный путь к команде, которую вы выполняете. В вашем случае:

sudo /usr/lib/postgresql/9.1/bin/initdb /usr/local/var/postgres
1

У меня была эта проблема с экземпляром Amazon Web Services. Сайт Postgresql предполагает, что у вас установлены сервер и клиент.

sudo yum install postgresql postgresql-server postgresql-devel postgresql-contrib postgresql-docs

0

Скорее всего, initdb не был установлен в папку $PATH . Проверьте ваши пути (где система ищет исполняемые файлы)

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Чтобы найти, где был установлен initdb , вы можете просто найти его напрямую

find / -name initdb
/usr/lib/postgresql/9.1/bin/initdb /usr/local/bin/

у вас есть два варианта в этом случае. Либо добавьте каталог postgres в $PATH либо выполните mv в одном из мест, перечисленных в $PATH

 mv /usr/lib/postgresql/9.1/bin/initdb /usr/local/bin/

в результате initdb должен дать вам какой-то вывод.

 initdb
 initdb: no data directory specified
 You must identify the directory where the data for this database system
 will reside.  Do this with either the invocation option -D or the
 environment variable PGDATA.

Убедитесь, что бинарный файл Postgres перемещен в то же место, что и initdb

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .