Чтобы удалить видео из базы данных, выполните следующие действия
1. Остановите службу сервера nns (Путь: Панель Управления\Администрирование\Службы),
2. Откройте командную строку от имени администратора,
3. Если ваш сервер установлен в директорию по умолчанию, запустите PostgreSQL с помощью команды
"C:\Program Files\KickidlerNode\pgsql\bin\pg_ctl.exe" start -D "C:/Program Files/KickidlerNode/pgsql/data" -w -o "--logging-collector=on --log-destination=stderr --log-directory=pg_log --log-filename=ipg-%a.log --log-truncate-on-rotation=on --log-rotation-age=1d --log-line-prefix=\"%m \" --log-timezone=\"Europe/Moscow\" --log-statement=ddl --log-connections=on --log-disconnections=on --listen-addresses=127.0.0.1 --port=5439 --max-connections=100 --shared-buffers=262144kB --wal-buffers=5242kB --effective-cache-size=734317kB --work-mem=7811kB --maintenance-work-mem=39059kB --checkpoint-segments=64 --checkpoint-completion-target=0.9"
4. Подключитесь к PostgreSQL с помощью команды:
"C:\Program Files\KickidlerNode\pgsql\bin\psql.exe" -h 127.0.0.1 -p 5439 -U kickidler_node
5. Проверьте объемы видео по датам с помощью запроса:
select pos::date, pg_size_pretty(sum(octet_length(data))) from video_frame group by pos::date;
6. Удалите видео одним из следующих методов:
a) Удаление всего видео
Для удаления всего видео в базе данных выполните последовательно команды
truncate video_frame; truncate video_sequence;
Eсли после выполнения команды появились ошибки, повторите запрос со словом cascade в конце.
b) Удаление всего видео за определенный период
Для удаления данных за какой-то конкретный день выполните следующие команды:
Вывод дат, за которые есть видео в базе данных:
select pos::date from video_frame group by pos::date;
Удаление видео за определенный день:
delete from video_frame WHERE pos::date = '20160523'; delete from video_sequence WHERE first_frame_pos::date = '20160523';
Удаление видео за несколько разных дней:
delete from video_frame WHERE pos::date = '20160523' OR pos::date = '20160524' OR pos::date = '20160525'; delete from video_sequence WHERE first_frame_pos::date = '20160523' OR first_frame_pos::date = '20160524' OR first_frame_pos::date = '20160525';
Удаление видео за период:
delete from video_frame WHERE pos::date >= '20160523' AND pos::date <= '20160525'; delete from video_sequence WHERE first_frame_pos::date >= '20160523' AND first_frame_pos::date <= '20160525';
где 20160523 - дата дня, за который вы хотите удалить видео, в формате YYYYMMDD
c) Удаление всего видео по определенному пользователю
Для удаления данных по определенному пользователю выполните следующие команды:
Вывод списка имен пользователя-домена-имени компьютера и объему видео по ним
SELECT online_session.user_name, online_session.user_domain, online_session.computer_name, pg_size_pretty(sum(octet_length(data))) FROM video_frame JOIN video_sequence ON (video_sequence.id=video_frame.sequence_id) JOIN online_session ON (video_sequence.online_session_id=online_session.id) GROUP BY online_session.user_name, online_session.user_domain, online_session.computer_name ORDER BY sum(octet_length(data)) DESC;
Удаление видео по пользователю
DELETE FROM video_sequence WHERE id IN( SELECT vs.id FROM video_sequence AS vs JOIN online_session AS s ON(vs.online_session_id=s.id) WHERE s.user_name='Эдуард' AND s.computer_name='win10x64' AND s.user_domain='workgroup' LIMIT 100 );
Здесь s.user_name - имя пользователя, s.computer_name – имя компьютера, s.user_domain – имя домена, по которым необходимо удалить видео. Если некоторых из параметров нет, то их в запросе оставить пустыми. Также выведено ограничение операций (Limit=100), который можно менять при необходимости.
7. После команд удаления выполните команду оперативного освобождения места
vacuum full;