MySQL: выборка последних значений таблицы с группировкой по колонке

Задача: выбрать последние по дате значения в таблице для каждого значения в колонке source

Решение: запрос получается с соединением. Т.е. в соединении мы делаем запрос максимальных дат с группировкой по source, а затем соединяем по дате и значению source

SELECT 
m_data.* 
from 
m_data 
inner JOIN (
    SELECT MAX(m_data.dt) as dt,m_data.source from m_data where m_data.source in (SELECT id FROM sources where device IN (1,2)) GROUP by m_data.source
) as maximum
on (maximum.source=m_data.source and maximum.dt=m_data.dt)

postgresql: выполнение запроса из командной строки

Задача: периодически необходимо подрезать логи

Решение: самое простое подготовить скрипт на bash и разместить ссылку на его выполнение в crontab:

#!/bin/bash
PGPASSWORD="Zewkkjfoeir" psql -U eee_pg -d eee -c "delete from log where dt<now() - INTERVAL '90 DAYS'"

Insert или Update если не уникальная запись

Маленькая напоминалка . Синтаксис pgsql чуть отличается от mysql.

Задача: если запись не уникальна в таблице, то просто обновить дату последнего обновления.

MySQL:

INSERT INTO users_sessions(user_id, ssid) VALUES(10, "1") ON DUPLICATE KEY UPDATE last_updated=now()

PostgreeSQL:

insert into users_sessions (user_id,ssid) values (10,'1') on conflict(ssid) do update set last_updated=now();

Уникальным должен быть объявлен столбец ssid

Ошибка обновления Ubuntu с 20.04 до 22.04

При попытке выполнить do-release-upgrade, получаем ошибку:

Failed to connect to https://changelogs.ubuntu.com/meta-release-lts-development.

Решение:

В моём случае в логах проскочило:

esult of meta-release download: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:841)

Так-же можно проверить «тухлость» сертификата при помощи:

wget https://changelogs.ubuntu.com/meta-release-lts-development

Рекомендация обновить корневые сертификаты не помогла. Одно из решений — отключить проверку сертификатов при обновлении вообще. Для этого нужно отредактировать файл /usr/lib/python3/dist-packages/UpdateManager/Core/MetaRelease.py, добавив в него строки:

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

После чего обновление прошло штатно.

UBUNTU: настройка ротации логов

В Ubuntu за ротацию логов отвечает утилита logrotate. Обычно она уже установлена в «базе».

Для настройки используется каталог /etc/logrotate.d В этой папке необходимо добавить файл вида:

/home/user/ocpp_servers/*.log {
        weekly
        missingok
        rotate 90
        compress
        delaycompress
        notifempty
        create 755 root adm
        sharedscripts
}

Собственно просто указываем файлы которые нуждаются в «ротации», и внутри скобок — что делать с ними.

  • rotate — указывает сколько старых логов нужно хранить, в параметрах передается количество;
  • create — указывает, что необходимо создать пустой лог файл после перемещения старого;
  • dateext — добавляет дату ротации перед заголовком старого лога;
  • compress — указывает, что лог необходимо сжимать;
  • delaycompress — не сжимать последний и предпоследний журнал;
  • extension — сохранять оригинальный лог файл после ротации, если у него указанное расширение;
  • mail — отправлять Email после завершения ротации;
  • maxage — выполнять ротацию журналов, если они старше, чем указано;
  • missingok — не выдавать ошибки, если лог файла не существует;
  • olddir — перемещать старые логи в отдельную папку;
  • postrotate/endscript — выполнить произвольные команды после ротации;
  • start — номер, с которого будет начата нумерация старых логов;
  • size — размер лога, когда он будет перемещен;
  • hourly — каждый час;
  • daily — каждый день;
  • weekly — каждую неделю;
  • monthly — каждый месяц;
  • yearly — каждый год.

Тестирование получившейся конфигурации:

logrotate -d /etc/logrotate.d/ocpp

1 9 10 11 12 13 60