Skip to content

Новости за 2025-02-22 - 2025-02-28

§ selber уточнил формулировку задачи 143 (SELECT, рейтинг).


§ Популярные темы недели на форуме

Топик		Сообщений	Просмотров
17 (SELECT) 4 3
303 (SELECT) 3 6
Guest's book 2 17

§ Авторы недели на форуме

Автор		Сообщений
Nividimka 2
pegoopik 2
Gambit87 2
Продолжить чтение "Новости за 2025-02-22 - 2025-02-28"

Параметры и настройки создания базы данных в 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. Мы вернемся к этой теме, когда я напишу более подробную статью о ролях. Так или иначе, эта тема вкратце раскрыта в следующих двух статьях:

Продолжить чтение "Параметры и настройки создания базы данных в PostgreSQL"

Шпаргалка по правильному написанию запросов к SQL server: EXISTS и NOT EXISTS

Пересказ статьи Erik Darling. The How To Write SQL Server Queries Correctly Cheat Sheet: EXISTS and NOT EXISTS


Замечательная вещь, связанная с SQL, состоит в том, что имеется много директив, которые довольно легко понять и использовать по назначению.

Ужасная вещь, относящаяся к SQL, заключается в том, что в нем столько же правил, которые применяются избирательно, как и в самом английском языке.

У меня, конечно, есть свои жалобы и недовольство относительно выбора некоторых из них, и вы тоже в этом убедитесь, когда глубже вникните в язык. Типичным примером этого типа является мое желание использовать в SQL GET вместо SELECT для извлечения данных.

Очень немного людей идут в магазин выбирать (select) молоко, яйца, масло, соль, перец и виски. Большинство из нас просто идет взять (get) их. Но хватит о завтраке.

Давайте поговорим о двух наиболее часто упускаемых из виду и недооцененных возможностях в языке SQL: EXISTS и NOT EXISTS. Возможно, они бы больше привлекали внимание, если бы назывались THERE and NOT THERE, но тогда была бы опасность начального затруднения с предложениями WHERE и THERE.

Часто очерняемые теми, кто читал статью в 1998 о "подзапросах в MySQL, которые медленнее, чем соединения", эти предикаты являются двумя наиболее полезными вещами, которые вы можете освоить и использовать регулярно.

Хотя они несколько напоминают подзапросы, столбцы, которые вы выбираете в подзапросе EXISTS или NOT EXISTS не могут использоваться во внешнем запросе. Вы можете поместить что угодно в список SELECT, от * или 1 до COUNT или 1/0, или всего содержимого Библии короля Якова, и это никогда не приведет ни к каким даже самым незначительным изменениям в мире. Аналогично, добавление DISTINCT, TOP или любого другого ограничителя числа строк не сделает ничего такого, чтобы изменить план запроса или его производительность.

Преодолейте себя.

И EXISTS, и NOT EXISTS уже установили число строк в 1, поскольку все, что нужно сделать каждому из них, это определить, существует хотя бы одна строка или нет, и наоборот.
Продолжить чтение "Шпаргалка по правильному написанию запросов к SQL server: EXISTS и NOT EXISTS"

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

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


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

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

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


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

Новости за 2025-02-15 - 2025-02-21

§ Новая задача от Pegoopik выставлена под номером 239; сложность задачи 2 балла.


§ Проверка задачи 143 (SELECT, рейтинг) усилена данными от selber и Дмитрий Гринкевич


§ Популярные темы недели на форуме

Топик		Сообщений	Просмотров
1 (SELECT) 5 14
58 (Learn) 3 8
65 (Learn) 3 7
143 (SELECT) 3 7
40 (SELECT) 2 6
Продолжить чтение "Новости за 2025-02-15 - 2025-02-21"

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

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


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

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

Следующий запрос поможет вам найти потенциально неэффективные индексы.
Продолжить чтение "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. При преобразовании кода мы стремимся насколько это возможно придерживаться совместимости с целевым назначением. Однако в некоторых случаях, хотя код кажется идентичным, функциональность может измениться. Давайте рассмотрим здесь один такой случай. Продолжить чтение "Проблемы преобразования PL/pgSQL: курсоры и последний Fetch"

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

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


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


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

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


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

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

Продолжить чтение "PostgreSQL - блокировки уровня строки и уровня таблицы"

Новости за 2025-02-08 - 2025-02-14

§ На третий этап выставлена новая задача от pegoopik - 217 (2 балла). Прежняя задача 217 перенесена в головоломки под номером 263.


§ Популярные темы недели на форуме

Топик		Сообщений	Просмотров
5 (SELECT) 7 8
143 (SELECT) 5 4
91 (Learn) 2 8
35 (Learn) 2 13
76 (Learn) 2 4
Продолжить чтение "Новости за 2025-02-08 - 2025-02-14"

Индексация запросов SQL Server для производительности: исправление оконных функций

Пересказ статьи Erik Darling. Indexing SQL Server Queries For Performance: Fixing Windowing Functions


Ответом на проблемы производительности, связанные с ранжирующими оконными функциями, почти всегда было предложение просто включить пакетный режим (Batch Mode). Там, где это невозможно, вы могли прибегнуть к добавлению индексов.

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

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

Я хочу вам показать ограниченность индексирования для решения проблем производительности ранжирующих оконных функций в построчном режиме (Row Mode). Это особенно болезненно для разработчиков, вынужденных использовать Standard Edition, где пакетный режим безнадежно канул в Лету.

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

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

Вот несколько примеров: Продолжить чтение "Индексация запросов SQL Server для производительности: исправление оконных функций"

Освоение строковых функций Python

Пересказ статьи Syed Hamed Raza. Mastering Python String Functions


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

1. Базовые операции со строками


1.1 Конкатенация


Одной из наиболее востребованных операций со строками является конкатенация. Python позволяет соединять две и более строк с помощью оператора +.

str1 = "Hello"
str2 = "World"
result = str1 + " " + str2
print(result)

Hello World

Продолжить чтение "Освоение строковых функций Python"

MySQL INTO OUTFILE против INTO DUMPFILE

Пересказ статьи Chad Callihan. MySQL INTO OUTFILE vs. INTO DUMPFILE


Я еще не писал о MySQL, так что настало время несколько разнообразить блог.

Есть пара разных способов экспорта данных с помощью запроса SELECT в MySQL: INTO OUTFILE и INTO DUMPFILE. Давайте используем образец базы данных Sakila в MySQL и проделаем несколько примеров, чтобы сравнить эти два варианта.
Продолжить чтение "MySQL INTO OUTFILE против INTO DUMPFILE"
Категории: MySQL

Новости за 2025-02-01 - 2025-02-07

§ Популярные темы недели на форуме

Топик		Сообщений	Просмотров
238 (SELECT) 4 4
5 (SELECT) 3 3
16 (Learn) 2 23
17 (Learn) 2 13
235 (SELECT) 2 4

§ Авторы недели на форуме

Автор		Сообщений
pegoopik 6
DanRev 3
lutik 2
selber 2
Gambit87 2
Продолжить чтение "Новости за 2025-02-01 - 2025-02-07"

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

Имеет ли значение порядок в GROUP BY?

Пересказ статьи Brent Ozar. Does Your GROUP BY Order Matter?


Иногда, когда вы используете GROUP BY, порядок столбцов имеет значение. Например, эти два запроса SELECT дают разные результаты:

CREATE INDEX Location_DisplayName
ON dbo.Users(Location, DisplayName);

SELECT TOP 100 Location, DisplayName, COUNT(*) AS Duplicates
FROM dbo.Users
GROUP BY Location, DisplayName
ORDER BY Location, DisplayName;

SELECT TOP 100 DisplayName, Location, COUNT(*) AS Duplicates
FROM dbo.Users
GROUP BY DisplayName, Location
ORDER BY DisplayName, Location;

Их действительные планы выполнения существенно разнятся:

Продолжить чтение "Имеет ли значение порядок в GROUP BY?"