Data Science. SQL hub
36K subscribers
1.01K photos
64 videos
37 files
1.05K links
По всем вопросам- @workakkk

@itchannels_telegram - 🔥лучшие ит-каналы

@ai_machinelearning_big_data - Machine learning

@pythonl - Python

@pythonlbooks- python книги📚

@datascienceiot - ml книги📚

РКН: https://vk.cc/cIi9vo
Download Telegram
Работа_с_PostgreSQL_в_Python.pdf
804.4 KB
🖥 Работа с PostgreSQL в Python на русском

Подключение к БД
Создание таблиц
Вставка и извлечение данных
Обновление таблиц
Удаление строк

#doc #python #postgresql #russian

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍214🥰1🤔1
🖥 Неожиданная находка, которая освобождает 20 GB неиспользованного индексного пространства.

Как освободить место без удаления индексов или данных
Раз в несколько месяцев мы получаем предупреждения от системы мониторинга базы данных о том, что свободное место скоро закончится. Обычно мы просто выделяем больше места и забываем об этом, однако в этот раз мы были на карантине и система была нагружена меньше, чем обычно. И тут мы подумали, что это хорошая возможность провести чистку.

Начнем с конца: в итоге нам удалось освободить более чем 70 GB не оптимизированного и неиспользуемого пространства без удаления индексов и данных.

Используя обычные приемы, такие как перестроение индексов и таблиц, мы очистили много пространства, но затем одна удивительная находка помогла нам освободить дополнительно примерно 20 GB неиспользуемых индексированных значений.

Читать

#postgresql

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🔥3
🖥 СОВЕТ: В SQL, если вы ищите «все строки без определенного значения» вывод не будет включать строки, содержащие NULL 😳

Мой коллега постоянно работает с базами данных и обнаружил это вчера на собственном горьком опыте.

Некоторым это может показаться неожиданным поведением для движков: #mysql, #postgresql.

Если вы хотите вывести NULL, используйте `val != 'crazy' OR val IS NULL`

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥52🎉2
🖥 Как можно избежать усложнения запроса лишними CASE

Тут ниже представлена попытка заNULLить значение, если оно равно чему-то.
, CASE WHEN sdate = '1900-01-01' THEN NULL ELSE sdate END sdate
, CASE WHEN mdate = '1900-01-01' THEN NULL ELSE mdate END mdate


Но ведь в PostgreSQL есть функция nullif, которая делает ровно то же самое.
NULLIF(значение1, значение2)

Функция NULLIF выдаёт значение NULL, если значение1 равно значение2; в противном случае она возвращает значение1. Это может быть полезно для реализации обратной операции к COALESCE. В частности, для примера, показанного выше:

SELECT NULLIF(value, '(none)') ...

В данном примере если value равно (none), выдаётся null, а иначе возвращается значение value.

То есть в примере выше можно переписать короче и понятнее:
, NULLIF(sdate, '1900-01-01') sdate
, NULLIF(mdate, '1900-01-01') mdate


#PostgreSQL

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥54
🌐 openHalo позволяет приложениям, написанным для MySQL, работать с PostgreSQL, предлагая при этом лучшую производительность, чем MySQL!

openHalo поддерживает диалект SQL MySQL и использует тот же протокол соединения, что позволяет легко адаптировать приложения с MySQL к openHalo с минимальными изменениями кода. Это значительно упрощает миграцию с MySQL 5.7 или новее на openHalo, делая процесс быстрее, безопаснее и экономичнее.

С openHalo вы получаете повышенную производительность без дополнительных усилий и затрат, особенно для сложных SQL-запросов. Вы можете продолжать использовать знакомые инструменты, команды и драйверы MySQL для разработки.

🔗 GitHub

#openHalo #MySQL #PostgreSQL #database #migration

@sqlhub
6🔥5👍2
✔️ Wal-listener — это инструмент для прослушивания логов транзакций PostgreSQL (WAL) и конвертации их в удобный для обработки формат JSON.

Возможности

- Прослушивание изменений в PostgreSQL в режиме реального времени.
- Поддержка нескольких слотов репликации.
- Удобный вывод в формате JSON.
- Готов к использованию в качестве сервиса.

Пример использования

1. Создаём слот репликации:

SELECT * FROM pg_create_logical_replication_slot('test_slot', 'wal2json');


2. Запускаем wal-listener:

wal-listener --dsn "host=localhost port=5432 user=postgres dbname=test" --slot test_slot


3. Получаем JSON-объекты при изменениях в базе данных.

https://github.com/ihippik/wal-listener

#devops #девопс #PostgreSQL #sql

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍52
🧠 SQL-задача с подвохом: "Невидимые дубликаты"

В таблице users хранятся email-адреса пользователей. Некоторые юзеры регистрируются повторно, маскируя один и тот же email по-разному:

| id | name | email |
|----|----------|--------------------------|
| 1 | Alice | alice@example.com |
| 2 | Bob | ALICE@EXAMPLE.COM |
| 3 | Charlie | alice@example.com |
| 4 | Dave | alice+promo@example.com |
| 5 | Eve | a.l.i.c.e@example.com |


🎯 Цель:
Найти количество уникальных пользователей, если:
- Регистр не учитывается (`alice` = `ALICE`)
- Пробелы игнорируются
- Для @gmail.com:
— Убираются точки в имени
— Всё после + отрезается

SQL-решение:


SELECT COUNT(DISTINCT normalized_email) AS unique_users
FROM (
SELECT
CASE
WHEN email ILIKE '%@gmail.com' THEN
REGEXP_REPLACE(
SPLIT_PART(SPLIT_PART(LOWER(TRIM(email)), '+', 1), '@', 1),
'\.', '', 'g'
) || '@gmail.com'
ELSE
LOWER(REPLACE(TRIM(email), ' ', ''))
END AS normalized_email
FROM users
) AS cleaned;


🔍 Как это работает:

LOWER(TRIM(email)) — убираем пробелы и регистр

SPLIT_PART(..., '+', 1) — отрезаем всё после +

REGEXP_REPLACE(..., '\.', '', 'g') — удаляем точки

Считаем DISTINCT, чтобы получить число уникальных email'ов

🔥 Используй такие трюки для:
• антифрода
• чистки базы
• аналитики поведения пользователей

#SQL #PostgreSQL #Gmail #EmailNormalization #DevTools #AntiFraud #DataCleaning #Analytics
👍104
📦 Outbox — надёжная реализация outbox-паттерна на Go для микросервисов

Если твои сервисы пишут в базу и одновременно публикуют события в Kafka, RabbitMQ или другие брокеры — знай: без outbox-паттерна ты рискуешь потерять данные.

🔧 Outbox — это лёгкая и удобная библиотека на Go, которая помогает сделать доставку сообщений атомарной и надёжной, без лишней сложности.

🧠 Что она делает:

1. Сохраняет событие в таблицу outbox в рамках транзакции
2. Отдельный воркер читает сообщения и отправляет их в брокер
3. После успешной доставки — сообщение помечается как доставленное

💡 Особенности:

- Поддержка PostgreSQL
- Готовые адаптеры для Kafka и RabbitMQ
- Возможность использовать свой брокер (реализуй интерфейс)
- Поддержка сериализации / форматирования событий
- Использует sqlx и стандартную database/sql

🧩 Подходит для:

- надёжной синхронизации БД событий
- микросервисов, где важна консистентность
- систем, где нужна повторная доставка без дублей

🔥 Отличный выбор, если ты хочешь atomic-публикацию событий без тяжёлых фреймворков и сервисов.

#Go #OutboxPattern #Kafka #RabbitMQ #Microservices #EventDriven #PostgreSQL

🔗 https://github.com/oagudo/outbox

@sqlhub
5👍5🔥2
🌊📊 pg_lake: Postgres для Iceberg и хранилищ данных

pg_lake позволяет интегрировать файлы Iceberg и хранилищ данных в PostgreSQL, превращая его в полноценную lakehouse-систему. Поддерживает транзакции и быстрые запросы к таблицам Iceberg, а также работу с сырыми данными из облачных хранилищ, таких как S3.

🚀Основные моменты:
- Создание и модификация таблиц Iceberg с полными транзакционными гарантиями.
- Запрос и импорт данных из файлов в форматах Parquet, CSV, JSON.
- Экспорт результатов запросов обратно в облачные хранилища.
- Поддержка геопространственных форматов через GDAL.
- Использование встроенного типа данных для полуструктурированных данных.

📌 GitHub: https://github.com/Snowflake-Labs/pg_lake

#postgresql
👍54🔥2
🚀 Новый продвинутый планировщик заданий для PostgreSQL - лучше, чем cron

Если устал от cron и временных триггеров, обрати внимание на pg_timetable:

Сильный: гибкий, надёжный, с богатым функционалом
Легко настраивается, понятен и прозрачен
Позволяет:
• запускать SQL-задачи по расписанию
• отслеживать их статус и history
• обеспечивать graceful restart и защиту от сбоев

Идеален для рабочих баз, сложной логики задач и критичных приложений.

📦 Репозиторий: https://github.com/cybertec-postgresql/pg_timetable

#golang #postgresql #devops #golang
👍114🔥2
🖥 XiYan-SQL - инструмент для интерактивной работы с SQL, основанный на LLM

XiYan-SQL - это open-source решение, позволяющее генерировать, анализировать и выполнять SQL-запросы с использованием больших языковых моделей. Инструмент ориентирован на ускорение исследования данных и автоматизацию рутинных операций, связанных с запросами к базе.

Ключевые возможности:
- Генерация SQL из естественного языка -пользователь формулирует задачу обычными словами, а система преобразует её в корректный SQL-запрос.
- Интерактивная работа с базой данных - запросы можно оперативно уточнять, редактировать и выполнять, получая быстрый цикл обратной связи.
- Поддержка нескольких СУБД - PostgreSQL, MySQL, SQLite и другие.
- 🛠️ Минимальная конфигурация - подходит для анализа данных, прототипирования и облегчения доступа к базе без сложной инфраструктуры.

Преимущества использования:
- Существенно снижает трудоёмкость написания сложных SQL-запросов.
- Упрощает работу аналитикам и разработчикам, которым важно быстро получать корректные результаты.
- Может выступать в роли интерактивного помощника для изучения структуры базы и построения отчётов.

🔗 Репозиторий: github.com/XGenerationLab/XiYan-SQL

@ai_machinelearning_big_data


#sql #llm #ai #opensource #database #datatools #postgresql
Please open Telegram to view this post
VIEW IN TELEGRAM
👍106👎6🥰1