Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2012-01-13

PostgreSQL

Вчера решил совместить нужное с полезным. Получилось приятное :)

Нужно было определить список (подмножество) файлов из определенного каталога, по дате модификации. Фигня, скажете вы. А я уточню — файлов более 4-х миллионов, что дает полный список размером почти в 1 гигабайт, что дает время перестроения списка файлов в, к примеру, тотальном коммандере десятки минут. И критерий поиска точно не определен. Нужна БД и индексы, однозначно.

И я собрался под это дело создать собственный сервер БД, с блекджеком и шлюхами PostgreSQL + PostGIS. Ибо все равно назрела потребность уйти с Oracle на более открытое и, что важнее, свободное решение. Это получается полезное дело.

В итоге я получил опыт установки и первичной настройки PostgreSQL на Debian. Что приятно :)

Поскольку в процессе запуска БД в эксплуатацию (надо было подключиться с виндовой машины и работать с БД) пришлось некоторое время гуглить, полный рецепт запуска кажется нетривиальным. Если бы предварительно прочесть мануалы, все стало бы проще, но мне не хотелось тратить день на чтение. Хотелось по быстрому.

Тут я и зафиксирую журнал установки PostgreSQL 9.1.2 + PostGIS на Debian testing (wheezy) «по быстрому». Установка всего из пакетов дистра, ничего «левого».

Создал виртмашину: виртбокс, 1 гиг память, 100 гиг диск, 2 ядра. Сетевой интерфейс bridge с хостовым.
Установил оп.систему, подключив в вирт.сидиром исошник сетевой установки. При установке выбрал базовые пакеты + ssh сервер.

Поднастроил под себя дебианчик (несущественные и ошибочные команды я убрал из списка):
root@postgis:~# history 
    4  uname -a
   11  cat /etc/fstab 
   16  tail -n 300 -f /var/log/syslog 
   18  nano /etc/apt/sources.list
# оставил только эти записи
deb http://mirror.yandex.ru/debian/ testing main contrib non-free
deb-src http://mirror.yandex.ru/debian/ testing main contrib non-free

deb http://security.debian.org/ testing/updates main
deb-src http://security.debian.org/ testing/updates main

deb http://mirror.yandex.ru/debian/ testing-proposed-updates contrib non-free main
deb-src http://mirror.yandex.ru/debian/ testing-proposed-updates contrib non-free main
   21  nano /etc/dhcp/dhclient.conf 
# поправил две строки
send host-name "postgis";
send dhcp-lease-time 360000;
   22  reboot
   27  aptitude install linux-headers-3.1.0-1-686-pae dkms make gcc
   29  nano .bashrc 
# добавил эти опции руту и своей основной учетке
shopt -s histappend
shopt -s cmdhist
export PROMPT_COMMAND='history -a'
export HISTFILESIZE=1000
export HISTSIZE=1000
export HISTCONTROL=ignoreboth:erasedups
   38  aptitude update; aptitude safe-upgrade; aptitude full-upgrade
   39  aptitude search postgis


Установил PostgreSQL+PostGIS
   43  aptitude install postgis
   44  aptitude install postgresql-9.1-postgis
   46  netstat -tuanp
и оказалось, что слушает он только на порту 127.0.0.1:5432 чего лично мне мало.

Дальше пошла настройка PostgreSQL

   50  passwd postgres
   51  /etc/init.d/postgresql restart

пытался найти как называется сервис, чтобы подключится с клиентской машины. Оказалось, что можно и без указания сервиса
   53  locate pg_service.conf
   55  less /usr/share/postgresql/9.1/pg_service.conf.sample

ставил админпак, чтобы pgAdmin не выступал
   56  aptitude install postgresql-contrib
   57  updatedb
   61  aptitude search postgresql-contrib
   62  aptitude install postgresql-contrib-9.1
   63  locate adminpack
   64  less /usr/share/postgresql/9.1/extension/adminpack—1.0.sql
   65  psql -U postgres < /usr/share/postgresql/9.1/extension/adminpack—1.0.sql
а так нельзя. Надо по другому, см.ниже
   66  su -l postgres
где-то тут все включилось и зашуршало
   67  watch "netstat -tuanp"
это был history рута.

Теперь, что я делал от имени пользователя postgres, глядя в stuartellis.eu/articles/postgresql-setup
root@postgis:~# su -l postgres
postgres@postgis:~$ psql
postgres=# alter role postgres with encrypted password 'guesswhat';


Вероятно, тут был обратно рут:
nano /etc/postgresql/9.1/main/postgresql.conf 
# внес строку
 listen_addresses = '*'
nano /etc/postgresql/9.1/main/pg_hba.conf
# добавил строку
 host all all 192.168.0.0/16  md5
root@postgis:~# /etc/init.d/postgresql restart

После рестарта я смог на клиентской машине законнектится pgAdmin-ом. Параметры коннекта:
host: postgis.algis.com
port: 5432
db: postgres
user: postgres
pass: guesswhat

И pgAdmin чего-то вякнул на тему adminpack (server instrumentation not installed). Я этот админпак поставил
   62  aptitude install postgresql-contrib-9.1
root@postgis:~# locate adminpack
так делать не надо:
   65  psql -U postgres < /usr/share/postgresql/9.1/extension/adminpack—1.0.sql
 err: Use "CREATE EXTENSION adminpack" to load this file.
postgresql.org/docs/9.1/static/sql-createextension
надо вот так:
postgres@postgis:~$ psql
postgres=# create extension adminpack;
CREATE EXTENSION
postgres=# /q
но результат странный — предполагалось, что у меня в pgAdmin будет доступ к файлам конфигов сервера — не вышло. В интернетах говорят, что эта функция работает только если pgAdmin запустить на хосте, где работает сервер.
А ошибка при попытке открыть конфиг такая:
ERROR: absolute path not allowed
CONTEXT: SQL function "pg_file_length" statement 1
archives.postgresql.org/pgadmin-support/2009-10/msg00001

Собственно, на этом первичная настройка сервера БД заканчивается. На этом месте я выключил виртмашину и сделал ее копию, на всякий случай. Вдруг кому понадобится сервер БД, а тут раз — уже сконфигуренная машина. Файл архива весит менее 700 мегабайт. Мелочь, а приятно.

Для полноты картины остается только обрисовать, как я выполнил задачу по загрузке списка файлов в таблицу и сделал нужную мне выборку. Это уже к теме «использование PostgreSQL». Но это я сделаю в следующем посте. А то многовато буков уже.

1 комментарий:

  1. Спасибо за наводку, не слыхал о таком инструменте. Завяжу себе узелок на память - непременно испытать, что за студия такая. Да еще и тезка моя.

    ОтветитьУдалить

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)