|   |   | 
| 
 | Обслуживание конкретной таблицы-ц в PostgreSQL | ☑ | ||
|---|---|---|---|---|
| 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) Спасибо, тоже работает.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |