Пересказ статьи Peyman. date_trunc function in PostgreSQL
Недавно мне потребовалось написать запрос SQL для получения множества данных из большой таблицы за конкретный интервал времени. Я не знаю, есть ли более простой способ в SQL, чтобы сделать это, я же обнаружил в PostgreSQL функцию date_trunc, которая является отличным решением моей проблемы.
Проблема на примере
Рассмотрим следующую таблицу.
И мы хотим получить по одной строке в час (или последнюю цену для каждого часа) для полета AB12. Вывод должен выглядеть примерно так.
Continue reading "Функция date_trunc в PostgreSQL"
Пересказ статьи Yash Marathe. Generalized Inverted Index in PostgreSQL
Исследование достоинств и недостатков GIN-индексов в PostgreSQL
Содержание
- Мотивация
- Введение
- GIN-индексирование изнутри
- Практический пример
- Уроки индекса GIN Trigram GitLab
- Заключение
- Ссылки
Continue reading "Обобщенный инвертированный индекс в PostgreSQL"
Пересказ статьи Yasin Sari. LATERAL as an Advanced SQL Feature
Я всегда представляю себе аналитика данных человеком, который имеет правильный инструмент для решения реальных проблем, во многом подобный швейцарскому армейскому ножу. Lateral - это одна из функций стандарта ANSI SQL, которая вам может пригодиться в некоторых случаях, поскольку она помогает легко решать проблемы. Я хочу продемонстрировать ее на нескольких примерах, чтобы показать, как она может улучшить анализ данных, обеспечив большую гибкость, скорость, сократить время и так далее.
Тематика
- SQL
- PIVOT
- PostgreSQL
- LATERAL JOIN
- Коррелирующие подзапросы
Continue reading "LATERAL как расширенная функция SQL"
Пересказ статьи MyFaduGame. Mastering FastAPI CRUD Operations with Async SqlAlchemy and PostgreSQL
В этом подробном руководстве мы познакомимся с построением надежных операций CRUD (Create, Read, Update, Delete) с помощью FastAPI, используя мощь Async SqlAlchemy и интеграцию с PostgreSQL для высокопроизводительного асинхронного взаимодействия с базой данных.
Мы разделим наш проект Fruit Full на несколько этапов:
- Введение в FastAPI и Async SqlAlchemy: Мы начнем с введения в FastAPI, современный, высокопроизводительный фреймворк Python для построения API, и Async SqlAlchemy, асинхронную версию SqlAlchemy, которая допускает неблокирующие операции с базой данных.
- Установка проекта: Мы проведем вас через установку проекта FastAPI с помощью SqlAlchemy и PostgreSQL. Это включает создание модели, конфигурирование соединения с базой данных и определение асинхронных операций CRUD.
- Асинхронные операции CRUD: Изучение выполнения асинхронных операций CRUD, используя FastAPI и Async SqlAlchemy. Мы обсудим асинхронное создание, чтение, обновление и удаление записей в базе данных.
- Обработка связей: Изучение асинхронной обработки связей между таблицами базы данных с использованием Async SqlAlchemy. Мы обсудим подробно связи один-к-одному, один-ко-многим и многие-ко-многим.
- Обработка ошибок и проверка: Изучение методов обработки ошибок и проверки данных в FastAPI, гарантирующих целостность и безопасность ваших конечных точек API. Мы обсудим проверку входа, ответы об ошибках и обработку исключений.
Continue reading "Освоение операций FastAPI CRUD с помощью Async SqlAlchemy и PostgreSQL"
Пересказ статьи Andrea Gnemmi. PostgreSQL Create Database Options and Settings
Первое, что нужно сделать администратору базы данных на новом экземпляре РСУБД, - это создать базу данных. Давайте узнаем, как это делается в PostgreSQL, включая синтаксис, особенности и отличия от других РСУБД.
Здесь будут рассмотрены все особенности и варианты синтаксиса команды CREATE DATABASE в PostgreSQL.
CREATE DATABASE в PostgreSQL
Базовый синтаксис команды CREATE DATABASE весьма прост и незатейлив: напечатайте CREATE DATABASE и имя базы данных, это все. Однако при этом вы должны иметь необходимые привилегии как суперпользователь (superuser) или иметь разрешение CREATEDB.
Краткое отступление о суперпользователе: в PostgreSQL это роль, довольно близкая к sa в SQL Server, и суперпользователь postgres создается по умолчанию при установке PostgreSQL. Мы вернемся к этой теме, когда я напишу более подробную статью о ролях. Так или иначе, эта тема вкратце раскрыта в следующих двух статьях:
Continue reading "Параметры и настройки создания базы данных в PostgreSQL"
Пересказ статьи Semab Tariq. PostgreSQL Internals Part 2: Understanding Page Structure
Это вторая статья
данной серии. В первой части мы рассмотрели кластеры баз данных и их физическую структуру.
Во второй части мы изучим внутреннюю структуру страницы в PostgreSQL. Первую часть вы можете найти
здесь.
Обзор макета страницы в PostgreSQL
При создании таблицы генерируется соответствующий файл данных. Внутри этого файла данные размещаются на страницах фиксированной длины, обычно 8-килобайтных, что принимается по умолчанию. Каждой странице присваивается последовательный номер, начиная с 0, который называется номером блока. PostgreSQL добавляет новую пустую страницу к концу файла, когда он заполняется. Тем самым увеличивается размер файла данных.
Continue reading "PostgreSQL изнутри. Часть 2: понимание структуры страницы"
Пересказ статьи Dmitry Romanoff. PostgreSQL. How do you find potentially ineffective indexes?
В то время как индексы в PostgreSQL могут значительно улучшить производительность запросов, особенно для тяжелых операций чтения, они полезны не во всех ситуациях.
Наличие слишком большого числа индексов на таблице PostgreSQL может оказать негативное влияние на производительность базы данных и потребление ресурсов.
Следующий запрос поможет вам найти потенциально неэффективные индексы.
Continue reading "PostgreSQL. Как обнаружить потенциально неэффективные индексы?"
Пересказ статьи Deepak Mahto. PL/pgSQL Conversion Gotchas Cursors and Last Fetch
Курсоры баз данных являются одним из ключевых компонентов разработки. Мы используем их для перемещению по результатам запроса для обработки, которая диктуется бизнес-логикой или функциональностью. В Code Conversion код курсора всегда приходится переносить либо из PL\SQL или T-SQL в Pl\pgSQL, и некоторые особые соображения следует привлекать в качестве передовой практики, чтобы избежать непредвиденных сюрпризов или нарушения функциональности.
Если вы хотите разобраться с курсорами в Pl\pgSQL, советую обратиться к
официальной документации PostgreSQL, в которой подробно описывается большинство деталей.
В этом блоге мы рассмотрим сценарии, связанные с курсорами, которые отличаются от обработки их в Oracle. При преобразовании кода мы стремимся насколько это возможно придерживаться совместимости с целевым назначением. Однако в некоторых случаях, хотя код кажется идентичным, функциональность может измениться. Давайте рассмотрим здесь один такой случай.
Continue reading "Проблемы преобразования PL/pgSQL: курсоры и последний Fetch"
Пересказ статьи Dileep kumar. PostgreSQL -Row level & Table level Locks
Пессимистичные блокировки в PostgreSQL
Пессимистичное блокирование представляет собой подход, когда мы предварительно запрашиваем блокировки на все записи, которые собираемся обновлять, и блокировки будут сняты, как только будет завершена транзакция. При использовании этого подхода мы можем применить строгий метод сериализации для одновременно выполняющихся запросов к данным.
Что такое блокировка
В мире баз данных блокировка является логическим объектом, который упорядочивает доступ к данным, когда два или более пользователей пытаются получить доступ к одним и тем же данным. Являясь развитой СУБД, PostgreSQL предоставляет несколько механизмов блокирования для обработки конкурентных запросов, что в конечном итоге обеспечивает большую согласованность данных.
В последующих разделах рассматриваются блокировки уровня строки, таблицы, сессии и транзакции.
Continue reading "PostgreSQL - блокировки уровня строки и уровня таблицы"
Пересказ статьи Virender Singla. Peek into Query Hash (query_id) in PostgreSQL
PostgreSQL имеет расширение с именем pg_stat_statements для отслеживания топовых SQL-запросов, которое издавна содержит столбцы queryid и query. Но pg_stat_activity приобрело столбец query_id, только начиная с версии PostgreSQL 14.
pg_stat_statements не захватывает выполняющиеся запросы SQL, а запросы нормализуются (удаляются константы и жестко закодированные значения) перед сохранением. Это означает, что SELECT pg_sleep(10); и SELECT pg_sleep(20); будут иметь единственную запись в виде SELECT pg_sleep($1);.
Вы видели когда-нибудь, чтобы в pg_stat_statements было две записи для одних и тех же query, userid, dbid, но с разными queryid?
Continue reading "Загляните в хэш запроса (query_id) в PostgreSQL"
Пересказ статьи Julien Van Beveren. Forcing the Postgres query planner into using the correct index using OFFSET 0
MySQL имеет возможность применять хинт USE INDEX для указания, какие индексы использовать при выполнении конкретного запроса. PostgreSQL не имеет такой особенности, полагая, что он лучше знает, когда и какие индексы использовать.
Перед выполнением запроса PostgreSQL строит "план". Это сложный процесс, который я хотел бы понимать досконально, но планировщик запросов главным образом смотрит на существующие индексы, распределение данных и фильтры запроса, чтобы найти различные способы вернуть затребованные вами данные. Затем он оценивает "стоимость" каждой операции и выполняет "самый дешевый" план. Это работает отлично до тех пор, пока не...
Continue reading "Принудительное использование планировщиком запросов Postgres правильного индекса с помощью OFFSET 0"
Пересказ статьи Bitnine Global. Converting Oracle PL/SQL to PostgreSQL PL/pgSQL
Добро пожаловать в мир программирования баз данных, в котором языки Oracle PL/SQL и PostgreSQL PL/pgSQL помогают привнести структуру и логику в данные. Эти процедурные языки являются основой внедрения бизнес-правил и манипуляции данными в сами базы данных, играя важную роль в администрировании баз данных.
Оба языка предоставляют возможность использовать переменные, операторы управления типа IF, CASE и LOOP, а также управлять исключениями - инструменты, необходимые для адаптивных и динамичных процедур работы с базами данных. Когда бы вы ни создавали новые функции или выполняли сложные процедуры, синтаксис CREATE PROCEDURE и CREATE FUNCTION станет частью вашего стандартного инструментария.
По мере того, как мы погружаемся в процесс преобразования из Oracle PL/SQL в PostgreSQL PL/pgSQL, мы будем открывать важные детали, необходимые для гладкого перехода.
Continue reading "Преобразование Oracle PL/SQL в PostgreSQL PL/pgSQL"
Пересказ статьи Kasper Junge. A Brief Guide to the PostgreSQL CLI
Использование интерфейса командной строки PostgreSQL (CLI) в первую очередь включает взаимодействие с двумя главными утилитами: psql, интерактивный терминал для работы с PostgreSQL, и различные инструменты командной строки типа pg_dump для резервных копий базы данных. Вот руководство, с которого можно начать:
Начнем с psql
Доступ к CLI:
- Откройте ваш интерфейс командной строки (терминал на Linux/macOS, командную строку или PowerShell на Windows
- Наберите psql -U [имя пользователя] -d [база данных] для подключения к вашей базе данных PostgreSQL. Замените [имя пользователя] на имя реального пользователя PostgreSQL, а [база данных] - на имя базы данных.
- Вам может потребоваться указать хост (-h [хост]) и порт (-p [порт]), если ваша база не находится на локальном севере и не использует порт по умолчанию.
Continue reading "Краткое руководство по PostgreSQL CLI"
Пересказ статьи Victor Magallanes. A Step-by-Step Guide: Restoring a PostgreSQL Database from a Dump SQL File
PostgreSQL является мощной системой управления реляционными базами данных с открытыми кодами, широко используемой для хранения и управления данными в различных приложениях. Иногда вам необходимо восстановить базу данных PostgreSQL из файла дампа SQL в случаях повреждения в результате сбоя, переноса или тестирования. В этой статье мы представим полное руководство по восстановлению базы данных PostgreSQL из файла дампа SQL, описав необходимые шаги и лучшую практику.
Понятие файлов дампа базы данных
Прежде чем перейти к процессу восстановления, давайте разберемся с тем, что представляет собой файл дампа базы данных. Дамп базы данных - это файл, содержащий снимок схемы базы данных и данных на конкретный момент времени. Этот файл обычно генерируется утилитой pg_dump, входящей в пакет PostgreSQL, и содержит команды SQL для воссоздания структуры базы данных и вставки в нее данных.
Continue reading "Пошаговая инструкция восстановления базы данных PostgreSQL из файла дампа SQL"
Пересказ статьи Dileep kumar. Bulk Insert with postgres_fdw in PostgreSQL 14
В этой статье мы обсудим представление модулем postgres_fdw обертки внешних данных, которая может использоваться для доступа к данных, хранящимся на внешних серверах PostgreSQL.
Этот новый модуль подобен старому модулю dblink. Функционально postgres_fdw является обработчиком данных полей для удаленных таблиц в PostgreSQL, который делает это более прозрачно и в соответствии со стандартом.
Continue reading "Массовая вставка в PostgreSQL 14 с помощью postgres_fdw"