Различные ебилды PostgreSQL и их использование. [solved]
Добрый вечер.
Понадобилось поставить postgresql, причём, желательно раздельно: на клиентскую машину — клиентскую часть, на сервер — серверную. Сказано — сделано. Смотрим:
# eix postgres
dev-db/postgresql
Available versions: 7.3.21 7.4.19 8.0.15 ~8.1.11 ~8.2.6 ~8.2.7 [M]~8.3.1!m {debug doc kerberos kernel_linux nls pam perl pg-intdatetime python readline selinux ssl tcl test xml zlib}
Homepage: http://www.postgresql.org/
Description: Sophisticated and powerful Object-Relational DBMS.
[I] dev-db/postgresql-base
Available versions:
(7.3) ~7.3.21!t
(7.4) ~7.4.19!t ~7.4.21-r1!t
(8.0) ~8.0.15!t ~8.0.17!t
(8.1) ~8.1.11!t ~8.1.13!t
(8.2) ~8.2.9!t ~8.2.10!t ~8.2.11!t
(8.3) (~)8.3.5!t
{doc kerberos ldap linguas_af linguas_cs linguas_de linguas_es linguas_fa linguas_fr linguas_hr linguas_hu linguas_it linguas_ko linguas_nb linguas_pl linguas_pt_BR linguas_ro linguas_ru linguas_sk linguas_sl linguas_sv linguas_tr linguas_zh_CN linguas_zh_TW nls pam pg-intdatetime readline ssl threads zlib}
Installed versions: 8.3.5(8.3)!t(23:04:31 04.04.2009)(linguas_ru nls pam readline ssl zlib -doc -kerberos -ldap -linguas_af -linguas_cs -linguas_de -linguas_es -linguas_fa -linguas_fr -linguas_hr -linguas_hu -linguas_it -linguas_ko -linguas_nb -linguas_pl -linguas_pt_BR -linguas_ro -linguas_sk -linguas_sl -linguas_sv -linguas_tr -linguas_zh_CN -linguas_zh_TW -pg-intdatetime -threads)
Homepage: http://www.postgresql.org/
Description: PostgreSQL libraries and clients
dev-db/postgresql-server
Available versions:
(7.3) ~7.3.21
(7.4) ~7.4.19 ~7.4.21
(8.0) ~8.0.15 ~8.0.17
(8.1) ~8.1.11 ~8.1.13
(8.2) ~8.2.9 ~8.2.10 ~8.2.11
(8.3) (~)8.3.5
{doc kernel_linux linguas_af linguas_cs linguas_de linguas_es linguas_fa linguas_fr linguas_hr linguas_hu linguas_it linguas_ko linguas_nb linguas_pl linguas_pt_BR linguas_ro linguas_ru linguas_sk linguas_sl linguas_sv linguas_tr linguas_zh_CN linguas_zh_TW nls perl python selinux tcl uuid xml}
Installed versions: 8.3.5(8.3)(23:11:23 04.04.2009)(kernel_linux linguas_ru nls perl python xml -doc -linguas_af -linguas_cs -linguas_de -linguas_es -linguas_fa -linguas_fr -linguas_hr -linguas_hu -linguas_it -linguas_ko -linguas_nb -linguas_pl -linguas_pt_BR -linguas_ro -linguas_sk -linguas_sl -linguas_sv -linguas_tr -linguas_zh_CN -linguas_zh_TW -selinux -tcl -uuid)
Homepage: http://www.postgresql.org/
Description: PostgreSQL server
…
virtual/postgresql-base
Available versions:
(7.3) 7.3
(7.4) 7.4
(8.0) 8.0
(8.1) ~8.1
(8.2) ~8.2
(8.3) ~8.3
Homepage: http://www.postgresql.org/
Description: Virtual for PostgreSQL base (clients + libraries)
* virtual/postgresql-server
Available versions:
(7.3) 7.3
(7.4) 7.4
(8.0) 8.0
(8.1) ~8.1
(8.2) ~8.2
(8.3) ~8.3
Homepage: http://www.postgresql.org/
Description: Virtual for PostgreSQL libraries
Мы видим dev-db/postgresql, версия которого не самая новая, да к тому же замаскирован для тестирования и, вроде бы по описанию подходящие dev-db/postgresql-server и dev-db/postgresql-base, которые можно поставить туда, где надо, плюс версии у них поновее. Ставим на сервер dev-db/postgresql-server, он с собой вытягивает dev-db/postgresql-base, но пусть. Мало ли что понадобится на сервере. На клиентской машине ставлю dev-db/postgresql-base. На сервере настраиваю и поднимаю postgres, пробую соединиться с ним клиентом:
# psql postgres postgres
Welcome to psql 8.3.5, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
postgres=# Всё замечательно. Пробую сделать то же самое на клиентском компьютере. Первое, с чем сталкиваюсь, так это с отсутствием psql. Удивился, поискал:
# equery f dev-db/postgresql-base | grep psq /usr/lib/postgresql-8.3/bin/psql /usr/share/postgresql-8.3/locale/ru/LC_MESSAGES/psql.mo /usr/share/postgresql-8.3/man/man1/psql.1.bz2 /usr/share/postgresql-8.3/psqlrc.sample
Попробовал подключиться тем, что нашёл:
# file /usr/lib/postgresql-8.3/bin/psql
/usr/lib/postgresql-8.3/bin/psql: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped
# /usr/lib/postgresql-8.3/bin/psql -h homegate postgres postgres
Welcome to psql 8.3.5, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
postgres=#Ура, работает! Задумался: а как же тогда на сервере выполняется psql без указания абсолютного пути? Смотрю:
# which psql /usr/bin/psql # ls -l /usr/bin/psql lrwxrwxrwx 1 root root 38 Апр 4 23:04 /usr/bin/psql -> /usr/lib/eselect-postgresql/binwrapper
Ага, думаю, значит eselect этим заведует. Глядим на клиенте:
# eselect postgresql list Available postgresql installations 8.3 <-* base-8.3.5 docs-8.3.5
Вроде бы запись 8.3 активна, но на всякий случай принудительно устанавливаем её:
# eselect postgresql set 8.3 !!! Warning: No file '/usr/include/postgresql-8.3/libpq-fe.h' to symlink !!! Warning: No file '/usr/include/postgresql-8.3/libpq' to symlink !!! Warning: No file '/usr/include/postgresql-8.3/postgres_ext.h' to symlink
Данная операция, к сожалению, не создаёт нужных симлинков. Разумеется, я могу их вручную создать, но при массовой установке оно как-то неизящно смотрится. Может ли система при установке пакета dev-db/postgresql-base автоматически создать все симлинки на содержимое /usr/lib/postgresql-8.3/bin/ в /usr/bin/ и т.п. директориях, не упустил ли я чего? Если нет, то не баг ли это?
Далее, интересно, зачем же нужны пакеты virtual/postgresql-base и virtual/postgresql-server? При размаскировке последнего, оказывается, размаскируются зависимости и пакеты для dev-db/postgresql, да и сам он. При установке, соответственно, они все и ставятся.
- Для комментирования войдите или зарегистрируйтесь

Похоже на таракан. Рекомендую
Похоже на таракан. Рекомендую отрапортоваться на bugs.gentoo.org
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Скиньте пожалуйста ссылочку
Скиньте пожалуйста ссылочку на багзиллу, если зарепортите, хочу подписаться.
-----------------------------------------»
если хочешь послать в MAN, лучше промолчи.
Я отправил в багзилу
Я отправил в багзилу проблему, а в это время уже решил её. Похоже, дело было в том, что предыдущий postgresql на клиенте некорректно удалился или что-то наподобие. Я удалил все упоминания о постгресе, прошёлся emerge --depclean и заново поставил postgres-base. Заработало как надо. Позже, когда ставил на клиент, где ни разу постгри не было, то там тоже всё сразу нормально поставилось.
Ссылка дома, приду — выложу.