Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 <<<<<<MINI-FAQ по форуму>>>>>>>  [new]
Shweik
Member

Откуда:
Сообщений: 704
В этом топике будем коллекционировать Q-A нашего форума.
Cначала я выполню то, что хотелось еще в 2005 - важные для читателя FAQ ссылки.
прим. мод. : выложил , но сам по привычке читаю оригинал, что и вам советую.
Дока по 8.4 собранная в CHM

1. Русский перевод официального FAQ

2.Неофициальный перевод FAQ по Win32 порту PostgreSQL
3. PostgreSQL General Bits - как-бы подбитые Elein Mustain итоги обсуждений в рассылке PostgreSQL).
FAQ по установке Постгреса под Win32 и другие документы
Как настроить полнотекстовый поиск (contrib/tsearch2) c поддержкой cp1251 Предложил aTz (msk) - инфа касается в основном тех кто вынужден пользоваться PG 7.x.

Правильность ответов не гарантирована ,а большинство ответов ориентирована на версии >8.1.2 Дополнения и поправки приветствуются.
----------------------------------------Приступим---------------------------------------------------
Прежде всего переменные окружения $PGDATA="/usr/mnt/ata04/pgsqldata"; это путь к кластеру с данными , постгрес там же хранит файлы postgresql.conf и pg_hba.conf
$PGBIN="/usr/local/pgsql/bin" - каталог исполняемых файлов постгреса.
В Вашем случае это могут быть скажем "С:\Program Files\PostgreSQL\data" и
"С:\Program Files\PostgreSQL\bin" соответственно.

1.Q: Как избавиться от "иероглифов" в окне терминала постгреса под Win32
A: Просто запишите в файл c:\Documents and Settings\<имяпользователя>\Application Data\postgresql\psqlrc.conf строчку \! chcp 1251

2.Q: Немогу присоединиться к постгресу по tcp_ip
A. Для версий >=8.0
Для версий <8.0 вместо listen_addresses нужно установить переменную tcpip_socket = true
Формат pg_hba тоже изменился в 8.0 Внимательно читаем комментарии в этом файле.

3.
Q: А я вот для Oracle/MS/My/... использовал классный инструмент XXX, а есть ли такое же но под PostgreSQL?

A: Под PostgreSQL есть следующий инструментарий:
a. PgAdminIII - лучше всего для администрирования.
b. EMS - самый лучший для программирования, и базового администрирования.
c. phpPgAdmin - как они себя определяют, подходит для DBA, ньюбов и хостеров.
d. Очередной коммерческий вариант админской тулзы триален ,сыроват и интересен пока что разве что возможностью онлайн мониторинга стата
f. Aqua Data Studio - админская тулза поддерживает в также PostgresSQL. Ранние версии доступны бесплатно.

5.
Q: Как поставить PostgreSQL на fat32?

A: Оно Вам нужно? Точно? А глюков не боитесь? А потери данных?
Лучше - не ставить. Или найти раздел с NTFS и поставить туда. Или сконвертить раздел под NTFS.

6.
Q: Как поставить PostgreSQL на другой раздел?

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

7.
Q: Да мне плевать на данные, но очень нужно поставить PostgreSQL на fat32! Как?

A: Ну, если очень нужно, то:
1. Поставить PostgreSQL или инсталлятором или просто бинарники.
2. Должен быть пользователь от имени которого будет работать серверный процесс PostgreSQL (далее имя пользователя - postgres). Этого пользователя может создать и инсталлятор, можно его создать и руками. Пользователь не должен входить в группу администраторов и ИМХО даже не опытных пользователей.
3. Дать полные права на папку с данными пользователю PostgreSQL (postgresql).
3. Создать базу с помощью initdb.
4. Зарегистрировать сервис c помощью pg_ctl, например:
pg_ctl.exe register -N pgsql-8.1 -P 000000 -U postgres -D "c:\Program Files\PostgresSQL\8.1\data"
5. Запустить сервис.

Есть более простой путь. При SilentInstall PostgreSQL не ругается на FAT32. Соответсвенно читаем и ставим.
8.
Q.У меня МЕГАСЕРВЕР, но PostgresSQL работает ужасно! Тормоза жуткие! Сделал все что мог, но не помогло! В чем грабли?

A.
Хотете получить ответ - заполните форму:
1. Версия PG? ОС?
2. Какие настройки? Особенно интересуют изменения в файле postgresql.conf
3. Есть ли еще что-то активно работающее на этой машине?
4. Тормоза на каких запросах? Каков объем данных?
5. А что с дисковой подсистемой?
6. А с CPU?
7. И к тормозящим запросам EXPLAIN ANALYZE?
8. Когда последний раз делался VACUUM FULL ANALYZE?

9.
Q Я создал таблицу, поле, представление... пытаюсь из него выбрать, а оно мне говорит что не найдено!

A В PostgreSQL важно наличие кавычек при указании имен сущностей и полей. Есть два правила:
1. Все что указывается в кавычках - считается регистрозависимым и соответсвенно создается, выбирается и т.д.
2. Все что не указывается в кавычках считается написанным в нижнем регистре.

И еще PostgreSQL в части имен является регистрозависимой СУБД.
Примеры:
"Table"<>Table, потому, что Table=table (правило 2), а "Table"<>table (правило 1).
TaBlE=tAblE, потому что и то и другое равно table (правило 2).

Отсюда вывод: "если при создании имена указаны в кавычках, и используются большие буквы - не удивляйтесь"
Andrey Daeron
10.
Q. Как мне переключиться с одной базы на другую? Существует ли аналог "use dbname"
A.В PG после установки коннекта нельзя сменить БД. нужно коннект разорвать, а потом соединиться с новой БД. или (если в запросе) использовать dblink
11.
Q. Как посмотреть план запроса внутри функции?
A. На сегодняшний момент способов посмотреть план выполнения функции нет.
12.
Q.
Delphi + PostgreSQL Что есть для работы?
A
Рекомендую компоненты прямого доступа (обе библиотеки используют только libpq.dll)
1) PostgresDAC
2) ZeosLib
13.
Q А что вообще есть кроме каталога дополнений contrib?
A Прежде всего замечательные ресурсы
PgFoundry
Gborg
14.
Q Правда ли что в PostgreSQL скорость выполнения транзакции (множество операций INSERT) не зависит от размеров транзакции?
A (с)tadmin:
На практике размер транзакции сложно влияет на скорость исполнения и зависит многих факторов:
1) помещается ли размер транзакции в ОЗУ?
2) помещается ли размер транзакции в кеш процессора (1-2-6 мб)?
3) нет ли плохого кода в самом постгресе, который приводит к скорости исполнения порядка O(N^2)?

На обычных задачах, ограничением является п 2). Как только транзакция (изоляция индексов и таблиц) начинается вытеснятся из кеша процессора, тут же появляется зависимость хуже чем O(N)

На моей практике (импорт больших объемов данных со сложными вставками во множество таблиц),
есть оптимальный размер транзакции. При переходе с 7ки на 8ку на одном железе оптимальный размерм транзакции вместо 20 записей стал 50. При переходе со старого Xeon на Opteron 852 опт. размер стал 80-90.
15.
QКак установить pl/Perl(win 32)?
A(с)ОКТОГЕН
1) Надо установить сам перл. Например, вот этот
2) Прописать "переменную среды path" , например, у меня так
C:\Perl\site\bin;C:\Perl\bin;C:\Program Files\PostgreSQL\8.4\lib;
3) Устанавливаем перл в базе
-- недоверенный
CREATE PROCEDURAL LANGUAGE 'plperlu'
HANDLER plperl_call_handler
VALIDATOR plperl_validator;
ALTER LANGUAGE plperlu OWNER TO postgres;
-- доверенный
CREATE TRUSTED PROCEDURAL LANGUAGE "plperl"
  HANDLER "plperl_call_handler"
  VALIDATOR "plperl_validator";
4) Наслаждаемся перлом.

QЯ перешёл из MySQL, есть ли переменные сессии и как их применить?

A(с)ОКТОГЕН
Если postgresql.conf в самом конце в секции
#---------------------------------------------------------------------------
# CUSTOMIZED OPTIONS
#---------------------------------------------------------------------------
custom_variable_classes = '' # list of custom variable class names
заменить к примеру на
custom_variable_classes = 'something'
И перегрузить постгрес то
Потом можно определять свои переменные уровня сессии ( соединения с БД)
Например так :
set something.hernya='lalala';
show something.hernya;
или тоже самое в SQL
select set_config('something.hernya','lalala',false)
select current_setting('something.hernya')
Важно :в переменной такого рода можно хранить только текст-
но при этом всегда можно текстовое значение привести к нужному типу..
13 фев 07, 15:59    [3778919]     Ответить | Цитировать Сообщить модератору
 Re: --MINI-FAQ по форуму  [new]
Andrey Daeron
Member

Откуда: Киев
Сообщений: 1027
Shweik
Сорри - дальнейшие посты буду мувать в FAQ сохраняя автора

Да ничего, я еще напишу.
Главное что бы таки помагало людям

ЗЫ Если бы кто взялся толково расписать вопросы по:
1. Партиционирование
2. Значения и их анализ в EXPLAIN ANALYZE
3. Использование индексов (легендарный вопрос про "неиспользовние индексов в 7.х")
4. Использование SET bitmap_scan , SET seq_scan и прочих для исследования запросов.
5. Настройка и ведение профайлинги (через лог и включение опций).
13 фев 07, 21:14    [3780777]     Ответить | Цитировать Сообщить модератору
 Re: --MINI-FAQ по форуму  [new]
Andrey Daeron
Member

Откуда: Киев
Сообщений: 1027
Мда, чет-то сегодня как не вопрос, так ФАК

Q: А где бы мне найти доки по PostgreSQL?

A: Тут все просто:
1. EN Главная дока по PostgreSQL
2. RU http://www.computerbooks.ru/books/Programming/Book-SQL/Vved/Index0.htm
3. ? Sams.PostgreSQL.2nd.Edition.Jul.2005.chm. Напрямую не качается, но догадаться несложно.
4. RU Дока на русском
5. EN http://www.postgresql.org/files/documentation/books/aw_pgsql/index.html
6. EN http://www.commandprompt.com/ppbook
7. RU http://predpinimatel-cd.com.ru/book/Programming/SQL/Menu.html
8. Бумага:
1. PostgreSQL. Руководство разработчика и администратора. Э. Гешвинде, Г-Ю. Шениг.
2. Ну, и еще, тех же авторов:
Разработка Web-приложений на PHP и PostgreSQL.
Издательство Diasoft, 2002 & 2003 гг.
14 фев 07, 18:34    [3786596]     Ответить | Цитировать Сообщить модератору
 Re: --MINI-FAQ по форуму  [new]
ZemA
Member

Откуда: Тюмень
Сообщений: 284
Arpanx
Как вернуть из Хранимой Процедуры (она же функция) набор записей с произвольным количеством полей?
Как принято делать? (неужели на каждый запрос надо описывать свой тип?)
Гуру покажите как и добавить вопрос в FAQ,

как-то так
create table some_table (
  f1 int4 primary key,
  f2 text,
  f3 text
);

insert into some_table values (1, 'qwerty', 'йцукен');
insert into some_table values (2, 'asdfgh', 'фывапр');

create function foo(bool)
  returns setof record as
'
declare
  x alias for $1;
  rec record;
begin
  if x then
    for rec in select f1, f2, f3 from some_table
    loop
      return next rec;
    end loop;
  else
    for rec in select f1, f2 from some_table
    loop
      return next rec;
    end loop;
  end if;
  return;
end;
' language plpgsql;

select * from foo(true) as (f1 int4, f2 text, f3 text);
 f1 |   f2   |   f3
----+--------+--------
  1 | qwerty | йцукен
  2 | asdfgh | фывапр

select * from foo(false) as (f1 int4, f2 text);
 f1 |   f2
----+--------
  1 | qwerty
  2 | asdfgh
22 фев 07, 07:47    [3819672]     Ответить | Цитировать Сообщить модератору
 Re: --MINI-FAQ по форуму  [new]
Serik Akhmetov
Member

Откуда:
Сообщений: 565
Как правильно задавать вопросы
1 мар 07, 06:53    [3846093]     Ответить | Цитировать Сообщить модератору
 Re: <<<<<<MINI-FAQ по форуму>>>>>>>  [new]
Andrey Daeron
Member

Откуда: Киев
Сообщений: 1027
Настройка PG за 5 минут
25 янв 08, 08:44    [5200998]     Ответить | Цитировать Сообщить модератору
 Re: <<<<<<MINI-FAQ по форуму>>>>>>>  [new]
st_serg
Member

Откуда: Москва
Сообщений: 591
Fader
Т.к. классического бэкапа стало нехватать, возникла необходимость настроить PITR.
Почитал документацию на офф.сайте, потыкался, но ничего толком не получилось.

Кто сумел поднять WAL и настроить таки PITR под винду просьба написать пошаговый "how-to" - решите сразу проблемы многих.

Вот примерный сценарий простейшего бекапа, однако не советую использовать простейший вариант в продакшене. Неплохо было бы команду для архивирования/восстановления логов, сделать более умной. Да и некоторые caveats надо обходить (напр. создание новых табличных пространств), вобщем документацию все равно прочитать надо :)

2модератор, честно говоря не знаю подходит мой пост под faq иль нет, так что прошу прощения на всякий случай

Строки начинающиеся с символа # (решетка) - мои комментарии
Active code page: 1251

c:\home\pg>cmd.exe
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

#
# Исходное состояние:
# Дистрибутив pg 8.3.1 распакован в c:\home\pg\8.3.1
# Файл 8.3.1-cmd.bat  устанавливает переменные окружения и запускает cmd.exe
#
c:\home\pg>dir
 Volume in drive C has no label.
 Volume Serial Number is 4CA6-478A

 Directory of c:\home\pg

05.09.2008  16:41    <DIR>          .
05.09.2008  16:41    <DIR>          ..
05.09.2008  16:40    <DIR>          8.3.1
05.09.2008  16:08                69 8.3.1-cmd.bat
               1 File(s)             69 bytes
               3 Dir(s)  16 775 454 720 bytes free

c:\home\pg>type 8.3.1-cmd.bat
@chcp 1251
@set path=%cd%\8.3.1\bin;%cd%\8.3.1\lib;%path%
cmd.exe

#
# Инициализируем кластер (часть сообщений поскипана)
#
c:\home\pg>initdb -D data
[skipped]
Success. You can now start the database server using:

    "postgres" -D "data"
or
    "pg_ctl" -D "data" -l logfile start


#
# сохраним дефолтную версию конфига
#
c:\home\pg>copy data\postgresql.conf data\postgresql.conf.orig
        1 file(s) copied.

#
# Отредактируем конфиг, включив WAL
#
c:\home\pg>notepad data\postgresql.conf

c:\home\pg>fc data\postgresql.conf.orig data\postgresql.conf
Comparing files DATA\postgresql.conf.orig and DATA\POSTGRESQL.CONF
***** DATA\postgresql.conf.orig

#archive_mode = off             # allows archiving to be done
                                # (change requires restart)
#archive_command = ''           # command to use to archive a logfile segment
#archive_timeout = 0            # force a logfile segment switch after this
***** DATA\POSTGRESQL.CONF

archive_mode = on               # allows archiving to be done
                                # (change requires restart)
archive_command = 'copy %p c:\\home\\pg\\xlogs\\%f'             # command to use to archive a logfile segment
#archive_timeout = 0            # force a logfile segment switch after this
*****


#
# Создаем директорию куда будут складываться WALы
#
c:\home\pg>mkdir xlogs

#
# Запускаем пг
#
c:\home\pg>pg_ctl start -D data
server starting

c:\home\pg>LOG:  система была отключена: 2008-09-05 16:42:18 MSD
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started

#
# Запускаем пг
# и начинаем бекап
#
c:\home\pg>psql -U sotinov
Active code page: 1251
                       version                       |            now
-----------------------------------------------------+----------------------------
 PostgreSQL 8.3.1, compiled by Visual C++ build 1400 | 2008-09-05 16:46:55.957+04
(1 запись)

Welcome to psql 8.3.1, 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=# select pg_start_backup('label');
 pg_start_backup
-----------------
 0/494D68
(1 запись)

postgres=# \q

#
# Создаем резервную копию файлов данных
#
c:\home\pg>mkdir data-bak

c:\home\pg>xcopy /E data data-bak
[skipped]
431 File(s) copied

#
# Выключаем режим бекапа
#
c:\home\pg>psql -U sotinov
Active code page: 1251
                       version                       |            now
-----------------------------------------------------+----------------------------
 PostgreSQL 8.3.1, compiled by Visual C++ build 1400 | 2008-09-05 16:51:44.836+04
(1 запись)

Welcome to psql 8.3.1, 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=# select pg_stop_backup();
 pg_stop_backup
----------------
 0/494DD0
(1 запись)

postgres=# \q

#
# Как видно из вывода dir WAL был успешно скоприрован
#
c:\home\pg>dir xlogs\*
 Volume in drive C has no label.
 Volume Serial Number is 4CA6-478A

 Directory of c:\home\pg\xlogs

05.09.2008  16:51    <DIR>          .
05.09.2008  16:51    <DIR>          ..
05.09.2008  16:42        16 777 216 000000010000000000000000
05.09.2008  16:51               235 000000010000000000000000.00494D68.backup
               2 File(s)     16 777 451 bytes
               2 Dir(s)  16 698 986 496 bytes free

#
# Имитируем работу с базой
#
c:\home\pg>psql -U sotinov
Active code page: 1251
                       version                       |            now
-----------------------------------------------------+---------------------------
 PostgreSQL 8.3.1, compiled by Visual C++ build 1400 | 2008-09-05 16:52:41.14+04
(1 запись)

Welcome to psql 8.3.1, 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=# create table tab1 as select * from pg_type;
SELECT                          ^
postgres=# insert into tab1 select * from tab1;
INSERT 0 269
postgres=# insert into tab1 select * from tab1;
INSERT 0 538
postgres=# insert into tab1 select * from tab1;
INSERT 0 1076
postgres=# insert into tab1 select * from tab1;
INSERT 0 2152
postgres=# insert into tab1 select * from tab1;
INSERT 0 4304
postgres=# insert into tab1 select * from tab1;
INSERT 0 8608
postgres=# insert into tab1 select * from tab1;
INSERT 0 17216
postgres=# insert into tab1 select * from tab1;
INSERT 0 34432
postgres=# insert into tab1 select * from tab1;
INSERT 0 68864
postgres=# \q

#
# Колво WALов увеличилось
#
c:\home\pg>dir xlogs\*
 Volume in drive C has no label.
 Volume Serial Number is 4CA6-478A

 Directory of c:\home\pg\xlogs

05.09.2008  16:53    <DIR>          .
05.09.2008  16:53    <DIR>          ..
05.09.2008  16:42        16 777 216 000000010000000000000000
05.09.2008  16:51               235 000000010000000000000000.00494D68.backup
05.09.2008  16:53        16 777 216 000000010000000000000001
               3 File(s)     33 554 667 bytes
               2 Dir(s)  16 624 394 240 bytes free

#
# Теперь восстановим нашу резервную копию
# Выключаем текущую базу
#
c:\home\pg>pg_ctl stop -D data
waiting for server to LOG:  получен запрос об умном осshut down...танове
.LOG:  autovacuum launcher shutting down
LOG:  отключение в процессе
..LOG:  система отключена
 готово
server stopped

#
# Удалим ненужные файлы
# Отключим в конфиге резервной копии WAL
#
c:\home\pg>del data-bak\postmaster.pid

c:\home\pg>del data-bak\postgresql.conf.orig

c:\home\pg>copy data-bak\postgresql.conf data-bak\postgresql.conf.orig
        1 file(s) copied.

c:\home\pg>notepad data-bak\postgresql.conf

c:\home\pg>fc data-bak\postgresql.conf.orig data-bak\postgresql.conf
Comparing files DATA-BAK\postgresql.conf.orig and DATA-BAK\POSTGRESQL.CONF
***** DATA-BAK\postgresql.conf.orig

archive_mode = on               # allows archiving to be done
                                # (change requires restart)
archive_command = 'copy %p c:\\home\\pg\\xlogs\\%f'             # command to use to archive a logfile segment
#archive_timeout = 0            # force a logfile segment switch after this
***** DATA-BAK\POSTGRESQL.CONF

archive_mode = off              # allows archiving to be done
                                # (change requires restart)
archive_command = ''            # command to use to archive a logfile segment
#archive_timeout = 0            # force a logfile segment switch after this
*****


#
# Логи в резервной копии нам не нужны
#
c:\home\pg>del data-bak\pg_xlog\*
c:\home\pg\data-bak\pg_xlog\*, Are you sure (Y/N)? y

c:\home\pg>del data-bak\pg_xlog\archive_status\*
c:\home\pg\data-bak\pg_xlog\archive_status\*, Are you sure (Y/N)? y


#
# Однако нам понядобятся еще не заархивированные логи из "продакшн" базы
#
c:\home\pg>xcopy /S data\pg_xlog data-bak\pg_xlog
data\pg_xlog\000000010000000000000000.00494D68.backup
data\pg_xlog\000000010000000000000001
data\pg_xlog\000000010000000000000002
data\pg_xlog\000000010000000000000003
data\pg_xlog\archive_status\000000010000000000000000.00494D68.backup.done
data\pg_xlog\archive_status\000000010000000000000001.done
6 File(s) copied

#
# Создаем простейший конфиг для восстановления
#
c:\home\pg>notepad data-bak\recovery.conf

c:\home\pg>type data-bak\recovery.conf
restore_command = 'copy c:\\home\\pg\\xlogs\\%f %p'

#
# Запускаем пг с резервной копией кластера
#
c:\home\pg>pg_ctl start -D data-bak
server starting

c:\home\pg>LOG:  database system was interrupted; last known up at 2008-09-05 16:47:39 MSD
LOG:  starting archive recovery
LOG:  restore_command = 'copy c:\\home\\pg\\xlogs\\%f %p'
The system cannot find the file specified.
        1 file(s) copied.
LOG:  restored log file "000000010000000000000000.00494D68.backup" from archive
        1 file(s) copied.
LOG:  restored log file "000000010000000000000000" from archive
LOG:  automatic recovery in progress
LOG:  REDO (повторить) начинается с 0/494DB0
        1 file(s) copied.
LOG:  restored log file "000000010000000000000001" from archive
The system cannot find the file specified.
LOG:  запись с нулевой длинноц в 0/2AB0A90
LOG:  REDO (повторить) завершено на 0/2AB0A48
LOG:  last completed transaction was at log time 2008-09-05 16:54:22.814+04
The system cannot find the file specified.
The system cannot find the file specified.
LOG:  selected new timeline ID: 2
The system cannot find the file specified.
LOG:  archive recovery complete
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started

#
# как видно сервер нашел логи и успешно их восстановил
# при этом наш recovery.conf переименовался в recovery.done
#
c:\home\pg>dir data-bak\reco*
 Volume in drive C has no label.
 Volume Serial Number is 4CA6-478A

 Directory of c:\home\pg\data-bak

05.09.2008  16:57                52 recovery.done
               1 File(s)             52 bytes
               0 Dir(s)  16 549 830 656 bytes free

#
# Попробуем приконектиться к восстановленной базе
#
c:\home\pg>psql -U sotinov
Active code page: 1251
                       version                       |            now
-----------------------------------------------------+----------------------------
 PostgreSQL 8.3.1, compiled by Visual C++ build 1400 | 2008-09-05 16:59:24.637+04
(1 запись)

Welcome to psql 8.3.1, 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=# select count(1) from tab1;
 count
--------
 137728
(1 запись)

postgres=# \q

c:\home\pg>

#
# Вроде все
#

5 сен 08, 17:49    [6153719]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: <<<<<<MINI-FAQ по форуму>>>>>>>  [new]
Multy
Member [заблокирован]

Откуда:
Сообщений: 420
Самый главный FAQ по установке:

Не забыть дать пользователю Postgres право на запись каталога где будут храниться базы. А то по ошибке которую он выдаёт понять это невозможно.

Я видимо очень талантлив, догадался менее чем за час. Другим может больше времени понадобится. Было бы не плохо конечно что бы он сам при установке об этом предупреждал.
27 фев 11, 13:55    [10295690]     Ответить | Цитировать Сообщить модератору
 Re: <<<<<<MINI-FAQ по форуму>>>>>>>  [new]
ОКТОГЕН
Member

Откуда:
Сообщений: 2479
Как подсчитать количество секунд между двумя полями типа timestamp ?
gray hemp
так

SELECT extract(epoch from '2011-04-07 08:47:02'::timestamp - '2011-04-07 08:46:41'::timestamp);
11 май 11, 19:06    [10637903]     Ответить | Цитировать Сообщить модератору
 ХОЧУ LIKE %сложный%шаблон% с индексом - как быть?  [new]
ОКТОГЕН
Member

Откуда:
Сообщений: 2479
автор
Есть LIKE %сложный%шаблон%. Можно ли сделать так,
чтоб для этой операции использовался индекс?

Можно. В 9.1 это можно будет сделать в лоб.
Для 8.4 тоже можно, но чуть сложнее, надо установить дополнения,
функционал, связанный с триграммами и выполнить скрипт pg_trgm.sql.
Далее, пусть есть таблица
CREATE TABLE public.example_table (
  id BIGSERIAL, 
  description VARCHAR(100) NOT NULL, 
  CONSTRAINT example_table_pkey PRIMARY KEY(id)
) WITHOUT OIDS;
И мы ищем по шаблону, по полю description
Необходимо создать индекс
CREATE INDEX example_table_idx ON public.example_table
  USING gin (description public.gin_trgm_ops);
Далее,
SELECT COUNT(0) FROM  public.example_table;
---------
2739337

EXPLAIN ANALYZE
SELECT 
  id,
  description
FROM 
  public.example_table 
WHERE   description % '%адин%';
----------------------------------------------
Bitmap Heap Scan on example_table  (cost=417.38..8533.23 rows=2739 width=53) (actual time=2.808..73.209 rows=2 loops=1)
  Recheck Cond: ((description)::text % '%адин%'::text)
  ->  Bitmap Index Scan on example_table_idx  (cost=0.00..416.69 rows=2739 width=0) (actual time=2.681..2.681 rows=1031 loops=1)
        Index Cond: ((description)::text % '%адин%'::text)
Total runtime: 73.247 ms
А теперь сравним с обычным LIKE
EXPLAIN ANALYZE
SELECT 
  id,
  description
FROM 
  public.example_table 
WHERE   description LIKE '%адин%';
----------------------------------------------
Seq Scan on example_table  (cost=0.00..62755.71 rows=274 width=53) (actual time=0.039..1389.810 rows=2 loops=1)
  Filter: ((description)::text ~~ '%адин%'::text)
Total runtime: 1389.841 ms
Результат выборки
id     description
59 адин
61 адинадин
Есть моменты. Как обычно, если селективность выборки низкая, то толку не будет,
и в данном примере выигрыша в производительности не наблюдалось до
700-900 тысяч записей.
Если у вас небольшая таблица - смысла использовать инструмент нет.(Хотя вроде как оптимизацию обещают)
И ещё, чем длиннее текст - тем больше набор триграм для него, соответственно, жирнее индекс.
Поэтому, нужно иметь маленькое текстовое поле с набором ключевых слов.
10 авг 11, 11:08    [11095892]     Ответить | Цитировать Сообщить модератору
 ХОЧУ LIKE %сложный%шаблон% с индексом - как быть?  [new]
ОКТОГЕН
Member

Откуда:
Сообщений: 2479
Индекс может быть и gin и gist типов.
Можно создать
CREATE INDEX example_table_idx ON public.example_table
  USING gist (description public.gist_trgm_ops);
Работает аналогично, но почему-то медленнее.
EXPLAIN ANALYZE
SELECT 
  id,
  description
FROM 
  public.example_table 
WHERE   description LIKE '%адин%';
------------------------------------------------------
Bitmap Heap Scan on example_table  (cost=360.81..8476.66 rows=2739 width=53) (actual time=1843.539..1843.541 rows=2 loops=1)
  Recheck Cond: ((description)::text % '%адин%'::text)
  ->  Bitmap Index Scan on example_table_idx  (cost=0.00..360.12 rows=2739 width=0) (actual time=1843.518..1843.518 rows=2 loops=1)
        Index Cond: ((description)::text % '%адин%'::text)
Total runtime: 1843.585 ms
Какой из типов использовать, зависит от ситуации(есть статья и страница докумментации на эту тему).
10 авг 11, 12:00    [11096392]     Ответить | Цитировать Сообщить модератору
 Re: <<<<<<MINI-FAQ по форуму>>>>>>>  [new]
ОКТОГЕН
Member

Откуда:
Сообщений: 2479
ОКТОГЕН
Индекс может быть и gin и gist типов.
Можно создать
CREATE INDEX example_table_idx ON public.example_table
  USING gist (description public.gist_trgm_ops);
Работает аналогично, но почему-то медленнее.
EXPLAIN ANALYZE
SELECT 
  id,
  description
FROM 
  public.example_table 
WHERE   description LIKE '%адин%';
------------------------------------------------------
Bitmap Heap Scan on example_table  (cost=360.81..8476.66 rows=2739 width=53) (actual time=1843.539..1843.541 rows=2 loops=1)
  Recheck Cond: ((description)::text % '%адин%'::text)
  ->  Bitmap Index Scan on example_table_idx  (cost=0.00..360.12 rows=2739 width=0) (actual time=1843.518..1843.518 rows=2 loops=1)
        Index Cond: ((description)::text % '%адин%'::text)
Total runtime: 1843.585 ms
Какой из типов использовать, зависит от ситуации(есть статья и страница докумментации на эту тему).

По результатам проверки на 9.1 оба индекса прошли проверку на 4500000 записей. Полёт нормальный.
Да, и всё-таки для подключения расширения триграмм надо сказать CREATE EXTENSION pg_trgm;
28 сен 11, 16:23    [11349600]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: <<<<<<MINI-FAQ по форуму>>>>>>>  [new]
PAPA_RimskY
Member

Откуда: СПб
Сообщений: 52
У меня одного в этой доке не работают ссылки на эти страницы?
Сижу с Фаерфокса.
Поиск по сайту не помог найти эти страницы(

http://postgresql.ru.net/docs/FAQ_russian.html#q2
2. Вопросы специфичные для платформы
http://postgresql.org/wiki/Running & Installing PostgreSQL On Native Windows
http://postgresql.org/wiki/Frequently Asked Questions#Platform FAQs
15 авг 14, 12:24    [16445641]     Ответить | Цитировать Сообщить модератору
 Re: <<<<<<MINI-FAQ по форуму>>>>>>>  [new]
Павел Лузанов
Member

Откуда:
Сообщений: 402
PAPA_RimskY,

Эти ссылки ведут на официальный сайт postgresql.org, а там у этих страничек немного поменялся адрес, вот и не находит.
Можно попросить админа сайта обновить ссылки или пойти на англоизычный FAQ, там ссылки работают.
16 авг 14, 10:34    [16449702]     Ответить | Цитировать Сообщить модератору
 Re: <<<<<<MINI-FAQ по форуму>>>>>>>  [new]
PAPA_RimskY
Member

Откуда: СПб
Сообщений: 52
По ссылке лежат два pdf с краткими инструкциями для маководов и виндузятников по созданию дампов и восстановлению из них.
Вдруг кому понадобятся.

http://help.theatremanager.com/book/export/html/1666
5 ноя 14, 17:48    [16802245]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: <<<<<<MINI-FAQ по форуму>>>>>>>  [new]
ОКТОГЕН
Member

Откуда:
Сообщений: 2479
Есть CSV. Как подключить его на чтение к моей базе, чтобы не экспортировать?

Просто! На примере кладра(база адресов РФ).
+
CREATE EXTENSION file_fdw;
CREATE SERVER pg_kladr FOREIGN DATA WRAPPER file_fdw;
CREATE FOREIGN TABLE public.kladr_doma (
  name TEXT,
  korp TEXT,
  socr TEXT,
  code TEXT,
  index TEXT,
  gninmb TEXT,
  uno TEXT,
  okatd TEXT
) 
SERVER pg_kladr
OPTIONS (
  filename '/db_data/db_external/kladr/doma.csv',
  format 'csv');
CREATE FOREIGN TABLE public.kladr_kladr (
  name TEXT,
  socr TEXT,
  code TEXT,
  index TEXT,
  gninmb TEXT,
  uno TEXT,
  okatd TEXT,
  status TEXT
) 
SERVER pg_kladr
OPTIONS (
  filename '/db_data/db_external/kladr/kladr.csv',
  format 'csv');
CREATE FOREIGN TABLE public.kladr_socrbase (
  level TEXT,
  scname TEXT,
  socrname TEXT,
  cod_t_st TEXT
) 
SERVER pg_kladr
OPTIONS (
  filename '/db_data/db_external/kladr/socrbase.csv',
  format 'csv');
CREATE FOREIGN TABLE public.kladr_street (
  name TEXT,
  socr TEXT,
  code TEXT,
  index TEXT,
  gninmb TEXT,
  uno TEXT,
  okatd TEXT
) 
SERVER pg_kladr
OPTIONS (
  filename '/db_data/db_external/kladr/street.csv',
  format 'csv');

Комментарии:
1)Версия должна pg быть не древнее 9.1
2)Файл *.csv должен лежать на самом сервере, на него и на путь к нему
должны быть права владельца сервиса СУБД, обычно это postgres
3)Пользуясь аналогичными источниками данных, можно подрубать таблицы и представления
любых внешних СУБД, на которые доступны расширения. См. EXTENSION
3 мар 17, 10:56    [20259657]     Ответить | Цитировать Сообщить модератору
 Re: <<<<<<MINI-FAQ по форуму>>>>>>>  [new]
ОКТОГЕН
Member

Откуда:
Сообщений: 2479
Где скачать хорошую книгу по СУБД на русском языке,
желательно, актуальной версии?

Переводы актуальных версий документации находятся здесь.
10 мар 17, 10:50    [20280596]     Ответить | Цитировать Сообщить модератору
 Re: <<<<<<MINI-FAQ по форуму>>>>>>>  [new]
Константин Сергеевич Дерерк
Member

Откуда:
Сообщений: 267
Спасибо, прочитал.
3 май 17, 16:06    [20453678]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить