powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / <<<<<<MINI-FAQ по форуму>>>>>>>
18 сообщений из 18, страница 1 из 1
<<<<<<MINI-FAQ по форуму>>>>>>>
    #34327569
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом топике будем коллекционировать 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 , например:
Код: plaintext
\npg_ctl.exe register -N pgsql- 8 . 1  -P  000000  -U postgres -D "c:\\Program Files\\PostgresSQL\\8.1\\data"\n
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) Устанавливаем перл в базе
Код: plaintext
\n-- недоверенный\nCREATE PROCEDURAL LANGUAGE \'plperlu\'\nHANDLER plperl_call_handler\nVALIDATOR plperl_validator;\nALTER LANGUAGE plperlu OWNER TO postgres;\n-- доверенный\nCREATE TRUSTED PROCEDURAL LANGUAGE "plperl"\n  HANDLER "plperl_call_handler"\n  VALIDATOR "plperl_validator";\n
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\')
Важно :в переменной такого рода можно хранить только текст-
но при этом всегда можно текстовое значение привести к нужному типу..
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #34328546
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShweikСорри - дальнейшие посты буду мувать в FAQ сохраняя автора
Да ничего, я еще напишу.
Главное что бы таки помагало людям

ЗЫ Если бы кто взялся толково расписать вопросы по:
1. Партиционирование
2. Значения и их анализ в EXPLAIN ANALYZE
3. Использование индексов (легендарный вопрос про "неиспользовние индексов в 7.х")
4. Использование SET bitmap_scan , SET seq_scan и прочих для исследования запросов.
5. Настройка и ведение профайлинги (через лог и включение опций).
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #34331378
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда, чет-то сегодня как не вопрос, так ФАК

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 гг.
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #34348845
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArpanxКак вернуть из Хранимой Процедуры (она же функция) набор записей с произвольным количеством полей?
Как принято делать? (неужели на каждый запрос надо описывать свой тип?)
Гуру покажите как и добавить вопрос в FAQ,
как-то так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
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
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #34362237
Serik Akhmetov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #35086678
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настройка PG за 5 минут
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #35525352
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FaderТ.к. классического бэкапа стало нехватать, возникла необходимость настроить PITR.
Почитал документацию на офф.сайте, потыкался, но ничего толком не получилось.

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

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

Строки начинающиеся с символа # (решетка) - мои комментарии
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
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>

#
# Вроде все
#

...
Рейтинг: 0 / 0
Период между сообщениями больше года.
<<<<<<MINI-FAQ по форуму>>>>>>>
    #37138115
Multy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый главный FAQ по установке:

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

Я видимо очень талантлив, догадался менее чем за час. Другим может больше времени понадобится. Было бы не плохо конечно что бы он сам при установке об этом предупреждал.
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #37255813
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как подсчитать количество секунд между двумя полями типа timestamp ?
gray hemp так
Код: plaintext
1.
SELECT extract(epoch from '2011-04-07 08:47:02'::timestamp - '2011-04-07 08:46:41'::timestamp);
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #37388563
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсть LIKE %сложный%шаблон%. Можно ли сделать так,
чтоб для этой операции использовался индекс?
Можно. В 9.1 это можно будет сделать в лоб.
Для 8.4 тоже можно, но чуть сложнее, надо установить дополнения,
функционал, связанный с триграммами и выполнить скрипт pg_trgm.sql.
Далее, пусть есть таблица
Код: plaintext
1.
2.
3.
4.
CREATE TABLE public.example_table (
  id BIGSERIAL, 
  description VARCHAR( 100 ) NOT NULL, 
  CONSTRAINT example_table_pkey PRIMARY KEY(id)
) WITHOUT OIDS;
И мы ищем по шаблону, по полю description
Необходимо создать индекс
Код: plaintext
1.
CREATE INDEX example_table_idx ON public.example_table
  USING gin (description public.gin_trgm_ops);
Далее,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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
Результат выборки
Код: plaintext
1.
2.
id     description
59       адин
61       адинадин
Есть моменты. Как обычно, если селективность выборки низкая, то толку не будет,
и в данном примере выигрыша в производительности не наблюдалось до
700-900 тысяч записей.
Если у вас небольшая таблица - смысла использовать инструмент нет.(Хотя вроде как оптимизацию обещают)
И ещё, чем длиннее текст - тем больше набор триграм для него, соответственно, жирнее индекс.
Поэтому, нужно иметь маленькое текстовое поле с набором ключевых слов.
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #37388726
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Индекс может быть и gin и gist типов.
Можно создать
Код: plaintext
1.
2.
CREATE INDEX example_table_idx ON public.example_table
  USING gist (description public.gist_trgm_ops);
Работает аналогично, но почему-то медленнее.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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
Какой из типов использовать, зависит от ситуации(есть статья и страница докумментации на эту тему).
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #37459447
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕНИндекс может быть и gin и gist типов.
Можно создать
Код: plaintext
1.
2.
CREATE INDEX example_table_idx ON public.example_table
  USING gist (description public.gist_trgm_ops);
Работает аналогично, но почему-то медленнее.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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;
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
<<<<<<MINI-FAQ по форуму>>>>>>>
    #38721139
PAPA_RimskY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня одного в этой доке не работают ссылки на эти страницы?
Сижу с Фаерфокса.
Поиск по сайту не помог найти эти страницы(

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
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #38721702
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PAPA_RimskY,

Эти ссылки ведут на официальный сайт postgresql.org, а там у этих страничек немного поменялся адрес, вот и не находит.
Можно попросить админа сайта обновить ссылки или пойти на англоизычный FAQ , там ссылки работают.
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #38796611
PAPA_RimskY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По ссылке лежат два pdf с краткими инструкциями для маководов и виндузятников по созданию дампов и восстановлению из них.
Вдруг кому понадобятся.

http://help.theatremanager.com/book/export/html/1666
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
<<<<<<MINI-FAQ по форуму>>>>>>>
    #39413558
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть CSV. Как подключить его на чтение к моей базе, чтобы не экспортировать?

Просто! На примере кладра(база адресов РФ).
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
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
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #39416700
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где скачать хорошую книгу по СУБД на русском языке,
желательно, актуальной версии?
Переводы актуальных версий документации находятся здесь .
...
Рейтинг: 0 / 0
<<<<<<MINI-FAQ по форуму>>>>>>>
    #39447991
Константин Сергеевич Дерерк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, прочитал.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / <<<<<<MINI-FAQ по форуму>>>>>>>
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]