Skip to content

Параметры и настройки создания базы данных в 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"

PostgreSQL изнутри. Часть 2: понимание структуры страницы

Пересказ статьи Semab Tariq. PostgreSQL Internals Part 2: Understanding Page Structure


Это вторая статья данной серии. В первой части мы рассмотрели кластеры баз данных и их физическую структуру.

Во второй части мы изучим внутреннюю структуру страницы в PostgreSQL. Первую часть вы можете найти здесь.

Обзор макета страницы в PostgreSQL


При создании таблицы генерируется соответствующий файл данных. Внутри этого файла данные размещаются на страницах фиксированной длины, обычно 8-килобайтных, что принимается по умолчанию. Каждой странице присваивается последовательный номер, начиная с 0, который называется номером блока. PostgreSQL добавляет новую пустую страницу к концу файла, когда он заполняется. Тем самым увеличивается размер файла данных.
Continue reading "PostgreSQL изнутри. Часть 2: понимание структуры страницы"

PostgreSQL. Как обнаружить потенциально неэффективные индексы?

Пересказ статьи Dmitry Romanoff. PostgreSQL. How do you find potentially ineffective indexes?


В то время как индексы в PostgreSQL могут значительно улучшить производительность запросов, особенно для тяжелых операций чтения, они полезны не во всех ситуациях.

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

Следующий запрос поможет вам найти потенциально неэффективные индексы.
Continue reading "PostgreSQL. Как обнаружить потенциально неэффективные индексы?"

Проблемы преобразования PL/pgSQL: курсоры и последний Fetch

Пересказ статьи 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"

PostgreSQL - блокировки уровня строки и уровня таблицы

Пересказ статьи Dileep kumar. PostgreSQL -Row level & Table level Locks


Пессимистичные блокировки в PostgreSQL


Пессимистичное блокирование представляет собой подход, когда мы предварительно запрашиваем блокировки на все записи, которые собираемся обновлять, и блокировки будут сняты, как только будет завершена транзакция. При использовании этого подхода мы можем применить строгий метод сериализации для одновременно выполняющихся запросов к данным.

Что такое блокировка


В мире баз данных блокировка является логическим объектом, который упорядочивает доступ к данным, когда два или более пользователей пытаются получить доступ к одним и тем же данным. Являясь развитой СУБД, PostgreSQL предоставляет несколько механизмов блокирования для обработки конкурентных запросов, что в конечном итоге обеспечивает большую согласованность данных.

В последующих разделах рассматриваются блокировки уровня строки, таблицы, сессии и транзакции.

Continue reading "PostgreSQL - блокировки уровня строки и уровня таблицы"

Загляните в хэш запроса (query_id) в 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"