|
Обслуживание конкретной таблицы-ц в PostgreSQL Winnie Buh, Leonidius, katamoto, d4rkmesa, Михаил_, formista2000, Eiffil123, vbus, arsik, zenik, LuckyStar, Затейник, boozin, DimR_71, Krendel, Garykom, Fram, Sserj, Мультук, ansh15, dyevgeniy, Волшебник, nemo1966, Beduin, Федя Тяпкин, Чеширский, fyn, Kobol, denk, novichok79, Михаил Козлов, bmitkin, cathode, Seriy_Volk, бегинер, shuhard, s_trikozin, osa1C, bogsv, odinsnik, Климов Сергей, ads55, andryscha1c, BOOL, nick86, Ватт, U4Me2
| ☑ | ||
---|---|---|---|---|
0
Leonidius
02.11.24
✎
10:22
|
Здравствуйте.
Подскажите, может есть у кого-то bash или Powershell скрипт для обслуживания не всего списка баз, а конкретной таблицы в конкретной базе. (PostgreSQL) Заранее благодарен. |
|||
1
formista2000
02.11.24
✎
10:28
|
(0) А что значит "обслуживание таблицы"? О.о
|
|||
2
Волшебник
02.11.24
✎
10:36
|
||||
3
Leonidius
02.11.24
✎
10:50
|
Как пример.
Есть скрипт. Активируется по заданию. В нём указывается конкретная база. Когда скрипт запускается, он перебирает всю базу. Мне нужно этот перебор превратить в конкретные цели. echo off for /f "delims=." %%i in ('wmic.exe OS get LocalDateTime ^| find "."') do set sDateTime=%%i set f_year=%sDateTime:~0,4% set f_month=%sDateTime:~4,2% set f_day=%sDateTime:~6,2% set f_hour=%sDateTime:~8,2% set f_min=%sDateTime:~10,2% set f_sec=%sDateTime:~12,2% set f_name_log=C:\logs\PG\Zup\logs_%f_year%.%f_month%.%f_day% echo on echo start: %f_year%.%f_month%.%f_day% - %f_hour%:%f_min%:%f_sec% >>%f_name_log%_vacuum.log SET PGPASSWORD=? "C:\Program Files\PostgreSQL 1C\15\bin\vacuumdb.exe" --dbname zup --host 127.0.0.1 --port 5432 --username postgres --echo --full --analyze >>%f_name_log%_vacuum.log echo end: %f_year%.%f_month%.%f_day% - %f_hour%:%f_min%:%f_sec% >>%f_name_log%_vacuum.log echo start: %f_year%.%f_month%.%f_day% - %f_hour%:%f_min%:%f_sec% >>%f_name_log%_reindex.log "C:\Program Files\PostgreSQL 1C\15\bin\reindexdb.exe" --dbname zup --host 127.0.0.1 --port 5432 --username postgres --echo >>%f_name_log%_reindex.log echo end: %f_year%.%f_month%.%f_day% - %f_hour%:%f_min%:%f_sec% >>%f_name_log%_reindex.log |
|||
4
formista2000
02.11.24
✎
10:39
|
(2) Да, для базы, это я знаю. А чтобы про конкретную таблицу - слышу впервые.
|
|||
5
Волшебник
02.11.24
✎
10:51
|
(3)(4)
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ таблица_и_столбцы [, ...] ] https://postgrespro.ru/docs/postgresql/14/sql-vacuum |
|||
6
osa1C
02.11.24
✎
10:51
|
(3) Какой то бред. "Обслуживание отдельной таблицы".... Таблица является частью базы данных, имеет ссылки на другие таблицы, что значит обслужить ее отдельно? Просто сломать? Так сломай сразу всю базу, зачем мелочиться
|
|||
7
Garykom
02.11.24
✎
11:17
|
(6) это не бред а реальность
вероятно плохие знания работы субд на низком уровне |
|||
8
Garykom
02.11.24
✎
11:21
|
(3)
Утилита vacuumdb представляют собой обёртку SQL-команды VACUUM
Утилита reindexdb представляет собой обёртку SQL-команды REINDEX
объясни нахрена вызывать снаружи? и это долго просто написать хранимку с нужными командами sql (VACUUM, REINDEX, etc) внутри и вызывать ее как тебе нравится хоть по триггеру через GUI для PostgreSQL 1C linux тут 17 пост |
|||
9
Garykom
02.11.24
✎
11:27
|
(8)+ настройки как часто выполнять хранимку можно прямо в базе хранить
в итоге никаких левых внешних скриптов, которые легко потеряются при переезде все в самой базе и кроссплатформенно! |
|||
10
Волшебник
02.11.24
✎
11:33
|
(6)
В PostgreSQL команды UPDATE или DELETE не вызывают немедленного удаления старой версии изменяемых строк. Этот подход необходим для реализации эффективного многоверсионного управления конкурентным доступом (MVCC, см. Главу 13): версия строки не должна удаляться до тех пор, пока она остаётся потенциально видимой для других транзакций. Однако в конце концов устаревшая или удалённая версия строки оказывается не нужна ни одной из транзакций. После этого занимаемое ей место должно быть освобождено и может быть отдано новым строкам, во избежание неограниченного роста потребности в дисковом пространстве. Это происходит при выполнении команды VACUUM.
Обычная форма VACUUM удаляет неиспользуемые версии строк в таблицах и индексах и помечает пространство свободным для дальнейшего использования. Однако это дисковое пространство не возвращается операционной системе, кроме особого случая, когда полностью освобождаются одна или несколько страниц в конце таблицы и можно легко получить исключительную блокировку таблицы. (VACUUM FULL возвращает) |
|||
11
Leonidius
02.11.24
✎
12:44
|
Через внутренние запросы получается отработать по одной таблице.
VACUUM (VERBOSE, FULL, ANALYZE) public._bprpoints713; (пример) И запрос можно сохранить даже в виде файла .sql. Мне просто необходимо по расписанию запустить этот .sql Руками он через PG Admin понятное дело запускается. Мне бы просто вариант с автоматизацией этого процесса. |
|||
12
Garykom
02.11.24
✎
12:49
|
(11) https://stackoverflow.com/questions/57865426/how-to-execute-a-procedure-call-in-postgresql-using-shell-script
если хочешь хранимку снаружи это пример для shell скрипта в линуксе как это на винде из bat/cmd хз но думаю можно |
|||
13
Garykom
02.11.24
✎
12:52
|
(12)+ "Use the -f parameter to pass the batch file name"
https://stackoverflow.com/questions/34880453/how-to-execute-postgres-sql-queries-from-batch-file |
|||
14
vbus
02.11.24
✎
14:46
|
chcp 1251 set PGUSER=postgres set PGPASSWORD=123456 set PGDATABASE=datebase set PGHOST=localhost set PGPORT=5432 rem Путь к psql set PSQL_PATH="C:\Program Files\PostgreSQL\13\bin\psql.exe" rem Выполнение VACUUM (VERBOSE, FULL, ANALYZE) %PSQL_PATH% -U %PGUSER% -h %PGHOST% -p %PGPORT% -d %PGDATABASE% -c "VACUUM (VERBOSE, FULL, ANALYZE) public.authentication_contact;" pause ------------------------------- BOSE, FULL, ANALYZE) public.authentication_contact;" ИНФОРМАЦИЯ: очистка "public.authentication_contact" ИНФОРМАЦИЯ: "authentication_contact": найдено удаляемых версий строк: 0, неудаляемых - 1, просмотрено страниц: 1 ПОДРОБНОСТИ: В данный момент нельзя удалить "мёртвых" строк 0. CPU: пользов.: 0.00 с, система: 0.00 с, прошло: 0.00 с. ИНФОРМАЦИЯ: анализируется "public.authentication_contact" ИНФОРМАЦИЯ: "authentication_contact": просканировано страниц: 1 из 1, они содержат "живых" строк: 1, "мёртвых" строк: 0; строк в выборке: 1, примерное общее число строк: 1 VACUUM |
|||
15
Leonidius
02.11.24
✎
14:56
|
(13) Спасибо, получилось.
|
|||
16
Leonidius
02.11.24
✎
14:56
|
(14) Спасибо, тоже работает.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |