postgresql
May 10

Заметки PostgreSQL

1. Работа в PSQL Tools

При работе в PSQL Tool печатаются символы не совпадающие с символами с клавиатуры. В консоли PSQL Tool висит сообщение WARNING

Для решения проблемы нужно открыть консоль PSQL Tool через командную строку.

psql -h warp -U postgres testbase

Подключаемся к базе данных testbase, работающей на сервере warp от имени пользователя postgres через psql.

Далее набираем:

psql \! chcp 1251

Если в процессе выполнения не было ошибок, пробуем повторить запрос в PSQL Tools.

2. При установке PostgreSQL желательно сразу указать кодовую страницу win1251. По умолчанию при установке указывается cp866.

3. Temp_buffers и work_mem.

Temp_buffers и work_mem нужны каждому сеансу. Теперь возьмите, сколько у вас памяти на сервере и разделите на количество активных пользователей – вот вам примерные ориентиры.

Зачем вообще нужен temp_buffers и work_mem?

Temp_buffers нужен, чтобы ваши временные таблицы создавались в памяти. Это не значит, что если временная таблица будет больше, чем temp_buffers, у вас все упадет. Нет, она просто на диск скопируется и там будет дальше работать.

Work_mem нужен, чтобы операции order by и distinct делались в памяти, эти операции сопровождают все динамические списки.

Поэтому work_mem тоже не забывайте увеличивать.

В настройках выставьте log_temp_files=temp_buffers. И если у вас в логах будут появляться записи, что у вас TEMPORARY TABLE создана на диске, там будет указано еще и сколько туда байт всунули и какой оператор это вызвал. И вы поймете, если у вас очень много таких записей, вам надо temp_buffers увеличить или work_mem.

4.

@echo off
setlocal
rem Установите переменные
set PGUSER=your_username
set PGPASSWORD=your_password
set PGHOST=localhost
set PGPORT=5432
set FROM_DB=ИмяБазыОткуда
set TO_DB=ИмяБазыКуда
set BACKUP_FILE=C:\path\to\backup\ИмяБазыОткуда.bak

rem Создание резервной копии
echo Creating backup of %FROM_DB%...
pg_dump -U %PGUSER% -h %PGHOST% -p %PGPORT% -F c -b -v -f %BACKUP_FILE% %FROM_DB%
rem Проверка успешности создания резервной копии
if %ERRORLEVEL% neq 0 (
echo Backup failed!
exit /b %ERRORLEVEL%
)

rem Восстановление базы данных
echo Restoring database to %TO_DB%...
pg_restore -U %PGUSER% -h %PGHOST% -p %PGPORT% -d %TO_DB% -v %BACKUP_FILE%
rem Проверка успешности восстановления
if %ERRORLEVEL% neq 0 (
echo Restore failed!
exit /b %ERRORLEVEL%
)

rem Удаление файла резервной копии
echo Deleting backup file...
del %BACKUP_FILE%
rem Проверка успешности удаления
if %ERRORLEVEL% neq 0 (
echo Failed to delete backup file!
exit /b %ERRORLEVEL%
)

echo Operation completed successfully!
endlocal

5. Ошибка "out of shared memory"

pg_dump: [archiver (db)] query failed: ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
pg_dump: [archiver (db)] query was: LOCK TABLE public._accumrgaggdict5h75976 IN ACCESS SHARE MODE

В каталоге data (По умолчанию, для 64 бит C:\Program Files\PostgreSQL\<версия_СУБД>\data), найти postgresql.conf, открыть блокнотом, найти и раскомментировать строчку max_locks_per_transaction=64 и поменять значение на 150, например.

6. PGTune

https://pgtune.leopard.in.ua/