Initdb команда не найдена ubuntu

Обновлено: 04.07.2024

Репутация: нет
Всего: 15

База встала и запускается нормально, но есть несколько сопутствующих проблем.
База стоит в /usr/lib/postgresql/8.4/.
Сразу скажу, что читал этот топик и чувствую, что у меня аналогичная проблема. Но я полный чайник в линуксе. Пробовал тупо повторять команды, написанные в топике - не помогло. А вот осмыслить суть этих действий не получается пока.

1. Чтобы начать работать с базой, надо ее создать. Делается это с помощью команды initdb, которая лежит в /usr/lib/postgresql/8.4/bin.
Саму команду выполнить не получалось (ошибка "initdb: command not found"). Нашел где-то, что надо выполнить команду:

Сделал, заработало.
Теперь вопросы: почему после перезагрузки команда initdb опять не выполняется (ошибка "initdb: command not found")?
Почему в ответ на команду

я получаю "export: command not found"?

2. У меня есть клиент, написанный на freepascal, который коннектится к базе. Для коннекта используются компоненты zeos (как именно там реализован коннект, я не знаю, знаю только, что через вызов библиотек, которые идут в комплекте с postgres), которые, в свою очередь, используют библиотеку libpq.so (которая у меня лежит в /usr/lib/). Так вот, при попытке соединиться с базой я получаю ошибку "None of dynamic libraries can be found: libpq.so.4, libpq.so".
Видел совет в подобных случаях выполнить

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

Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.

Репутация: 113
Всего: 317

1. RockClimber, в убунту есть специальный пользователь, окружение которого (PATH и остальная лабуда) позволяют ему всё что тебе надо. с помощью

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

Репутация: нет
Всего: 15

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


Ну клиента-то я сам писал, так что тут проблем нет. Я параллельно прорабатываю версию о том, что проблема не в системе, а в сборке клиента. Но пока результатов нет ни с той, ни с другой стороны.
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.

Репутация: 113
Всего: 317

изначально нужно создать пользователя, которым ты сможешь подсоединиться к БД.
для этого нужен административный доступ. у данного юзера есть этот доступ.

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

Репутация: нет
Всего: 15

Ффууу.
Разобрался 8)
Зашел в гости к одному знакомому гуру, с его помощью обнаружил, что библиотека у меня называется libpq.so.5, и ссылка (симлинк) с названием libpq.so, которая указывает на libpq.so.4, которой нет. Мы соорудили ссылку libpq.so.4, которая указывает на libpq.so.5, и все заработало.
А я уж было отаялся.
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.

  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).

В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.

[ Время генерации скрипта: 0.1041 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Шаг 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 делает not исправление проблемы. Я просто получаю: -bash: initdb: command not found . Отлично.

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

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

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

ОБНОВЛЕНИЕ От этого сайта , я прочитал о приоритете dotfiles. Похоже, что .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 .

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

Шаг 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: команда не найдена . Как эта команда не найдена? Я просто проклял! echo sudo $ PATH показывает каталог PostgreSQL в пути . что мне не хватает?

Я немного новичок в Linux, но это те самые неприятные проблемы, с которыми я сталкиваюсь!

UPDATE: I believe it's related to this question. However, running the command with sudo -i does not fix the problem. I just get: -bash: initdb: command not found . Great.

UPDATE: This seems even closer. So I added alias sudo='sudo env PATH=$PATH' to my .bashrc as instructed. Still doesn't effin' work! It looks like the alias isn't working. When I run alias , I only show a single one. And yet my .bashrc is full of them. so something is wrong with those getting set up.

UPDATE: Since I'm using Ubuntu and RVM, RVM recommended that I set up the terminal to "Run command as login shell". Based on reading I did here, it seems that the .bashrc file isn't read in a login shell, only profile. So I moved the alias line from .bashrc to .profile , so .profile now has this at the end:

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

UPDATE From this site, I read about the precedence of dotfiles. It looks like .bash_profile comes before .profile . That being said, my PATH additions were done in .profile , and seemed to be loaded just fine, so why wasn't the alias also working? Moving the alias into .bash_profile from .profile worked, however. Mystery. So then the alias command shows my new alias. I finally type in sudo initdb /usr/local/var/postgres , to be met with: initdb: cannot be run as root . Oh, really? Then why were you giving me permission errors?! So now I think the problem is that I just have to chown the folder, but still run initdb as my user rather than root .

UPDATE Running the command sudo chown myuser /usr/local/var/postgres/ , and then running initdb afterward allowed the database to be initialized. Glad it was so obvious that the directory permissions needed to be set to myuser and not root. Incredible. Successful database init 4 hours later.

PostgreSQL, как сказано на её официальном сайте, это самая продвинутая в мире реляционная база данных с открытым исходным кодом.

Использование PostgreSQL

Как запустить службу PostgreSQL. Как управлять службой PostgreSQL

Запуск службы PostgreSQL:

Остановка службы PostgreSQL:

Добавление службы PostgreSQL в автозагрузку:

Удаление службы PostgreSQL из автозагрузки:

Для просмотра состояния процесса PostgreSQL:

Альтернативный вариант запуска службы для работы с определённой базой данных следующий:

Как узнать, какая версия PostgreSQL запущена

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

Для определения версии сервера выполните команду:


Для определения версии клиента:


Ещё один вариант определения версии PostgreSQL:


Если вам нужен только номер версии (например, для скрипта), то используйте следующую команду:

Хотя вместо postgres можно использовать postmaster, использование postgres предпочтительнее, поскольку postmaster это устаревший псевдоним для postgres.

Если вы предпочитаете вариант с SQL, то подключитесь к интерактивному терминалу:

Также вам может пригодиться один из следующих вариантов


Как инициализировать базу данных PostgreSQL

Остановите службу, если она запущена:

Директория /var/lib/postgres/ должна принадлежать пользователю postgres:

Смените пользователя на postgres:

Выполните инициализацию БД:

Если вы столкнулись с ошибкой:

То найдите расположение файла initdb:

И укажите до него полный путь в команде инициализации:

Нажмите CTRL+D

Запустите службу PostgreSQL:

Создайте нового пользователя (например, user):

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

Создайте базу данных (например, my-first-db):

Как подключиться к локальному серверу PostgreSQL

Для подключения к интерактивному терминалу PostgreSQL используется команда psql.

Примеры синтаксиса команд:

Для psql требуется указать имя пользователя и если он не указан, то пересылается имя текущего пользователя системы, который скорее всего отсутствует в базе данных PostgreSQL, что вызывает ошибку. По умолчанию создаётся пользователь postgres, поэтому без дополнительной настройке вы можете подключиться к серверу PostgreSQL следующим образом:

Какой конфигурационный файл использует PostgreSQL

Конфигурационный файл PostgreSQL носит имя postgresql.conf.

В системе может быть несколько конфигурационных файлов PostgreSQL. Вы можете найти их командой:

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

  • /usr/lib/systemd/system/postgresql@.service.d/kali_postgresql.conf (путь в Kali Linux)
  • /usr/lib/sysusers.d/postgresql.conf (путь в Arch Linux)

Если вы настраиваете PostgreSQL, но после перезапуска службы с помощью systemd (systemctl) изменения не применяются, возможно, вы просто редактируете неверный файл.

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

  • /var/lib/postgres/data/postgresql.conf

С пакетом PostgreSQL могут поставляться образцы конфигурационных файлов, например:

  • /usr/share/postgresql/14/postgresql.conf.sample
  • /usr/share/postgresql/postgresql.conf.sample

Как обновить базу данных PostgreSQL при переходе на новую версию


Оно означает, что в системе 2 установленные версии PostgreSQL:

Если запустить службу PostgreSQL командой:

И проверить версию командой:

То будет выведено следующее:


То есть по умолчанию используется 13, устаревшая версия.

Удаление старых версий пакетов, например, командой:

ситуацию не меняет. Если вам нужно перенести базы данных из устаревшей версии в новую, то верните устаревшие пакеты, если вы успели их удалить.

Последующие действия подразумевают, что вы

1) установили новую версию PostgreSQL, но ещё не использовали её, то есть не сохраняли базы данных, поскольку файлы новой версии будут удалены.

2) хотите перенести старые база данных в новый формат

С помощью следующей команды просмотрите доступные кластеры:


На скриншоте только один из них online (я успел удалить пакет postgresql-13), но у вас оба должны быть online, иначе перенос базы данных не удастся.

Пример правильного вывода:

Как можно увидеть, обе версии 13 и 14 в настоящее время установлены и запущены. Держите в уме, что при переносе старой базы данных в новый формат вам понадобиться двойной объём места на диске, поскольку pg_upgradecluster копирует данные.

Процедура обновления включает в себя следующее:

1. Удаляем данные новой версии:

2. Запускаем процедуру обновления кластера:


3. Когда операция будет завершена, дважды проверьте, что всё работает

4. Удалите старую версию

Это показывает суть обновления кластера. Конечно, в конкретной вашей ситуации могут быть нюансы: другие номера версий, либо другое расположение файлов с базами данных.

Вновь проверяем версию:


Теперь используется 14, то есть самая последняя версия.

В чём разница между postgres и psql

postgres

postgres - это сервер базы данных PostgreSQL. Чтобы клиентское приложение могло получить доступ к базе данных, оно подключается (по сети или локально) к работающему экземпляру postgres. Затем экземпляр postgres запускает отдельный серверный процесс для обработки соединения.

Один экземпляр postgres всегда управляет данными только одного кластера базы данных. Кластер базы данных — это набор баз данных, который хранится в общей папке файловой системы («область данных»). В системе может работать более одного экземпляра postgres одновременно, если они используют разные области данных и разные порты связи. Когда postgres запускается, ему необходимо знать расположение области данных. Местоположение должно быть указано параметром -D или переменной среды PGDATA; по умолчанию это значение не установлено. Обычно -D или PGDATA указывает непосредственно на каталог области данных, созданный initdb.

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

Чтобы запустить postgres в фоновом режиме со значениями по умолчанию, введите:

Чтобы запустить postgres с определенным портом, например, 1234:

Чтобы подключиться к этому серверу с помощью psql, укажите этот порт с параметром -p:

или установите переменную окружения PGPORT:

psql

psql — это интерфейс для PostgreSQL на основе терминала. Он позволяет вам вводить запросы в интерактивном режиме, отправлять их в PostgreSQL и просматривать результаты запросов. В качестве альтернативы ввод может быть из файла или из аргументов командной строки. Кроме того, psql предоставляет ряд мета-команд и различных функций, подобных оболочке, для облегчения написания сценариев и автоматизации широкого спектра задач.

Пример запуска psql:

Запуск psql от пользователя postgres, который создаётся по умолчанию:

Ошибки PostgreSQL

psql: error: не удалось подключиться к серверу: Нет такого файла или каталога

При попытке подключиться к серверу PostgreSQL или выполнить запрос на сервере PostgreSQL, например:

вы можете столкнуться с ошибкой:

В англоязычной версии эта ошибка выглядит так:

Эта ошибка означает, что служба PostgreSQL не запущена, для её запуска выполните команду:

Альтернативный вариант запуска службы следующий:

Другой возможной причиной ошибки может быть то, что psql ищет файл сокета в неверной директории: например, файл сокета помещён в /tmp, а psql ищет его в /run/postgresql/. В этом случае вы можете с помощью опции --host явно указать директорию, в которой находится сокет:

FATAL: не удалось создать файл блокировки "/run/postgresql/.s.PGSQL.5432.lock": Нет такого файла или каталога

При запуске системы БД, например, следующей командой:

Вы можете столкнуться с ошибкой:


В англоязычной версии ошибка выглядит так:

  1. Создать данную директорию (если она отсутствует) и сделать её владельцем пользователя postgres
  2. Отредактировать конфигурационный файл так, чтобы служба пыталась создавать файл блокировки в директории /tmp, на которую у всех пользователей есть право записи

Первый вариант — создаём директорию /run/postgresql/ и назначаем её владельцем пользователя postgres:

Второй вариант — открываем конфигурационный файл postgresql.conf (у вас может быть другое расположение)

И добавляем туда следующую запись:

sudo: postgres: command not found

Если при использовании postgres вы столкнулись с ошибкой:

то у этой проблемы может быть две возможных причины:

1. Не установлен пакет postgresql.

Установите его одной из следующих команд.

В Debian, Kali Linux, Linux Mint, Ubuntu и их производных:

В Arch Linux, Manjaro, BlackArch и их производных:

2. Исполнимый файл postgres находится за пределами $PATH

Это необязательно говорит о проблеме — такой подход может использоваться для возможности иметь на одном компьютере сразу несколько серверов PostgreSQL.

Найдите исполнимый файл


Как можно видеть на скриншоте, исполнимый файл присутствует для двух версий сервера:

  • /usr/lib/postgresql/13/bin/postgres
  • /usr/lib/postgresql/14/bin/postgres

Теперь вместо postgres используйте полный путь в команде запуска, например:

psql: ошибка: ВАЖНО: роль "" не существует

При попытке запуска интерактивного терминала PostgreSQL

Вы можете столкнуться с ошибкой:

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

В англоязычной версии ошибка выглядит так:


Для psql необходимо имя пользователя и если оно не указано явно, то передаётся имя пользователя системы. Но поскольку данный пользователь не существует на сервере PostgreSQL, то возникает указанная выше ошибка.

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

По умолчанию присутствует пользователь postgres, поэтому вы можете подключиться от его имени:

Вы должны указать его расположение в параметре --config-file или -D, либо установить переменную окружения PGDATA

При запуске postgres вы можете столкнуться с ошибкой:


В англоязычной версии:

Суть ошибки в том, что необходимо указать конфигурационный файл в опции командной строки или в переменной окружения. Как вариант — можно указать путь до базы данных, содержащий конфигурационный файл. Например:

Конфигурационный файл называется postgresql.conf, но нужно указать не его, а директорию, в которой он содержится. Например:


initdb: command not found

Смотрите объяснение данной проблемы, а также дополнительные пути устранения в описании аналогичной ошибки: sudo: postgres: command not found

Найдите initdb с помощью:

  • /usr/lib/postgresql/13/bin/initdb
  • /usr/lib/postgresql/14/bin/initdb

И используйте в ваших командах абсолютный путь до файла initdb нужной вам версии, например:

Читайте также: