<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>SQL-Ex blog - PostgreSQL</title>
    <link>https://sql-ex.ru/blogs/</link>
    <description>Новости сайта &quot;Упражнения SQL&quot;, статьи и переводы</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 2.3.5 - http://www.s9y.org/</generator>
    <pubDate>Fri, 04 Sep 2026 10:24:00 GMT</pubDate>

    <image>
    <url>https://sql-ex.ru/images/logo.jpg</url>
    <title>RSS: SQL-Ex blog - PostgreSQL - Новости сайта &quot;Упражнения SQL&quot;, статьи и переводы</title>
    <link>https://sql-ex.ru/blogs/</link>
    <width></width>
    <height></height>
</image>

<item>
    <title>Правильный способ предоставить доступ к вашей базе данных PostgreSQL стороннему администратору</title>
    <link>https://sql-ex.ru/blogs/?/PostgreSQL.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/PostgreSQL.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3533</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3533</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;SHRIDHAR KHANAL: &lt;a href=&quot;https://stormatics.tech/blogs/the-right-way-to-give-a-third-party-dba-access-to-your-postgresql-database&quot;&gt;The Right Way to Give a Third-Party DBA Access to Your PostgreSQL Database&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Предоставление доступа к вашей базе данных PostgreSQL внешней команде — это решение, которое заслуживает некоторого обдумывания. Самый простой вариант — передать учётную запись суперпользователя, но это редко бывает правильным. Лучший подход — создать выделенную роль только с теми привилегиями, которые им действительно нужны, и это займёт всего несколько минут.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;За эти годы я был по обе стороны этого разговора. Я был внешним администратором, которого подключали к базе данных клиента, и я был внутренним инженером, решающим, какой доступ предоставить. Шаблон, который я собираюсь вам показать, — это тот, к которому я бы прибег в любой из этих ситуаций: специально созданная, не-суперпользовательская роль, которая даёт внешней команде ровно то, что им нужно для реальной работы, и ничего лишнего.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/PostgreSQL.html#extended&quot;&gt;Continue reading &quot;Правильный способ предоставить доступ к вашей базе данных PostgreSQL стороннему администратору&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 04 Sep 2026 13:24:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3533.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: fsync</title>
    <link>https://sql-ex.ru/blogs/?/GUC-fsync.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-fsync.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3532</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3532</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Christophe Pettus: &lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-fsync/&quot;&gt;All Your GUCs in a Row: fsync&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;fsync — это логический параметр, по умолчанию включён, его контекст — sighup, поэтому его можно изменить перезагрузкой конфигурации без перезапуска. Это также самая опасная настройка в postgresql.conf. Большинство параметров из этой серии при неправильной установке стоят вам плохого плана или некоторой потраченной впустую памяти. Этот же параметр при неправильной установке стоит вам кластера.&lt;/p&gt;&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-fsync.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: fsync&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 04 Sep 2026 11:34:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3532.html</guid>
    
</item>
<item>
    <title>GIN-индексы в PostgreSQL</title>
    <link>https://sql-ex.ru/blogs/?/GIN-PostgreSQL.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GIN-PostgreSQL.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3531</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3531</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Klaus Aschenbrenner: &lt;a href=&quot;https://www.sqlpassion.at/archive/2026/01/12/gin-indexes-in-postgresql/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=gin-indexes-in-postgresql&quot;&gt;GIN Indexes in PostgreSQL&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Если вы пришли из SQL Server (как в моём случае), индексы PostgreSQL могут показаться сначала знакомыми — существуют B-tree индексы, составные индексы, покрывающие индексы. А затем вы сталкиваетесь с запросами вроде:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre lang=&quot;sql&quot;&gt;&lt;code&gt;WHERE payload @&amp;gt; &#039;{&quot;type&quot;:&quot;payment&quot;,&quot;status&quot;:&quot;failed&quot;}&#039;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;или:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre lang=&quot;sql&quot;&gt;&lt;code&gt;WHERE tsv @@ plainto_tsquery(&#039;postgresql&#039;)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;В этот момент большинство разработчиков SQL Server задают два вопроса:&lt;/p&gt;&lt;br /&gt;
&lt;ol&gt;&lt;br /&gt;
    &lt;li&gt;Что это за операторы?&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;Почему для этого PostgreSQL требуется совершенно другой тип индекса?&lt;/li&gt;&lt;br /&gt;
&lt;/ol&gt;&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GIN-PostgreSQL.html#extended&quot;&gt;Continue reading &quot;GIN-индексы в PostgreSQL&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 03 Sep 2026 18:46:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3531.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: from_collapse_limit</title>
    <link>https://sql-ex.ru/blogs/?/GUC-from_collapse_limit.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-from_collapse_limit.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3530</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3530</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Christophe Pettus: &lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-from_collapse_limit/&quot;&gt;All Your GUCs in a Row: from_collapse_limit&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Почти никто не использует форму запроса, которой управляет этот параметр:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre lang=&quot;sql&quot;&gt;&lt;code&gt;SELECT &amp;#42; FROM x, y, (SELECT &amp;#42; FROM a, b, c WHERE something) AS ss&lt;br /&gt;
WHERE somethingelse;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Но вы постоянно создаёте её, не желая того. Ссылка на представление, содержащее соединение, приводит к тому, что определение представления подставляется вместо ссылки, и планировщик видит именно это: подзапрос в вашем списке FROM. Вложенные представления, SQL, сгенерированный ORM, и всё, что построено из многократно используемых фрагментах запросов, попадает к планировщику в этой форме. from_collapse_limit решает, что планировщик будет с этим делать.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-from_collapse_limit.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: from_collapse_limit&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 03 Sep 2026 12:13:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3530.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: file_extend_method</title>
    <link>https://sql-ex.ru/blogs/?/GUC-file_extend_method.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-file_extend_method.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3529</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3529</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus: &lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-file_extend_method/&quot;&gt;All Your GUCs in a Row: file_extend_method&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;file_extend_method — это «запасной выход» в тушке регулятора настройки. Он существует для одной цели: позволить вам отключить оптимизацию PostgreSQL 16 на тех файловых системах, где эта оптимизация вела себя некорректно.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-file_extend_method.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: file_extend_method&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 02 Sep 2026 14:46:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3529.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: file_copy_method</title>
    <link>https://sql-ex.ru/blogs/?/GUC-file_copy_method.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-file_copy_method.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3527</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3527</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Christophe Pettus: &lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-file_copy_method/&quot;&gt;All Your GUCs in a Row: file_copy_method&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;file_copy_method —  это перечисление из двух значений с совершенно невероятной отдачей. Одна из его настроек позволяет копировать базу данных примерно за долю секунды, независимо от того, имеет ли база данных размер один гигабайт или один терабайт. Другая — это способ, которым PostgreSQL всегда это делал. Перечисление является новым в PostgreSQL 18, и интересное значение — clone.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-file_copy_method.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: file_copy_method&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 01 Sep 2026 12:51:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3527.html</guid>
    
</item>
<item>
    <title>Обновление PostgreSQL с 9.6 до 17 с помощью pg_upgrade</title>
    <link>https://sql-ex.ru/blogs/?/PostgreSQL-9.6-17-pg_upgrade.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/PostgreSQL-9.6-17-pg_upgrade.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3526</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3526</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;&lt;a href=&quot;https://stormatics.tech/author/shridhar-khanal&quot;&gt;SHRIDHAR KHANAL&lt;/a&gt;: &lt;a href=&quot;https://stormatics.tech/blogs/upgrading-postgresql-9-6-to-17-with-pg_upgrade&quot;&gt;Upgrading PostgreSQL 9.6 to 17 with pg_upgrade&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;При обновлении между основными версиями PostgreSQL есть несколько способов. Дамп и восстановление (dump/restore) — самый простой с точки зрения понимания, но время простоя растёт прямо пропорционально размеру базы данных, поэтому для всего, что больше нескольких терабайт, этот вариант не подходит. Логическая репликация позволяет добиться почти нулевого времени простоя, но она работает только начиная с PostgreSQL 10; если ваш исходный кластер работает на версии ниже 10, этот путь в нативном виде недоступен. Остаётся pg_upgrade — инструмент, поддерживаемый сообществом для обновления основных версий «на месте». С флагом –link он создаёт жёсткие ссылки вместо копирования файлов данных, поэтому сам шаг обновления остаётся быстрым, независимо от размера базы данных.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Эта статья основан на обновлении с версии 9.6 до 17 на Ubuntu с использованием pg_upgrade. Я проведу вас через каждый этап, отмечу моменты, которые застают людей врасплох, и поделюсь проверочными запросами, которые мы выполняем после завершения обновления.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/PostgreSQL-9.6-17-pg_upgrade.html#extended&quot;&gt;Continue reading &quot;Обновление PostgreSQL с 9.6 до 17 с помощью pg_upgrade&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 31 Aug 2026 17:44:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3526.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: extra_float_digits</title>
    <link>https://sql-ex.ru/blogs/?/GUC-extra_float_digits.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-extra_float_digits.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3525</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3525</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus: &lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-extra_float_digits/&quot;&gt;All Your GUCs in a Row: extra_float_digits&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;extra_float_digits — это настройка, чья задача изменилась под ней. На протяжении большей части истории PostgreSQL она принуждала к выбору между выводом чисел с плавающей точкой, который был удобен для чтения, и выводом, который был абсолютно точным, и нельзя было иметь и то, и другое. Начиная с PostgreSQL 12 вам больше не нужно выбирать, поэтому параметр, к которому вы, возможно, привыкли прибегать, теперь вам редко понадобится.&lt;/p&gt;&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-extra_float_digits.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: extra_float_digits&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 31 Aug 2026 15:36:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3525.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: external_pid_file</title>
    <link>https://sql-ex.ru/blogs/?/GUC-external_pid_file.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-external_pid_file.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3524</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3524</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Christophe Pettus: &lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-external_pid_file/&quot;&gt;All Your GUCs in a Row: external_pid_file&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;PostgreSQL уже записывает PID-файл. Каждый раз при запуске postmaster он помещает postmaster.pid в каталог данных и удаляет его при чистом завершении работы. Этот файл является блокировкой, которая предотвращает запуск второго postmaster с тем же каталогом данных, и содержит восемь строк с деталями работающего экземпляра: PID, каталог данных, время запуска, порт, каталог сокетов и так далее. external_pid_file не заменяет его. Он просит postmaster записать второй, гораздо меньший файл в другом месте.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-external_pid_file.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: external_pid_file&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 29 Aug 2026 13:47:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3524.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: extension_control_path</title>
    <link>https://sql-ex.ru/blogs/?/GUC-extension_control_path.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-extension_control_path.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3521</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3521</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Christophe Pettus: &lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-extension_control_path/&quot;&gt;All Your GUCs in a Row: extension_control_path&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;На протяжении всей истории PostgreSQL до настоящего момента расширение должно было находиться ровно в одном месте. CREATE EXTENSION foo читал foo.control из встроенного каталога расширений, на который указывает pg_config --sharedir, и нигде больше не искал. Если вы хотели, чтобы расширение было доступно, его файлы должны были находиться в этом каталоге, что на практике означало установку от root в системное дерево или встраивание в образ. extension_control_path, новый в PostgreSQL 18, отменяет это допущение.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-extension_control_path.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: extension_control_path&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 28 Aug 2026 15:39:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3521.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: exit_on_error</title>
    <link>https://sql-ex.ru/blogs/?/GUC-exit_on_error.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-exit_on_error.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3519</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3519</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-exit_on_error/&quot;&gt;All Your GUCs in a Row: exit_on_error&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;PostgreSQL сортирует свои проблемы по степени серьёзности. ERROR прерывает текущий оператор и откатывает транзакцию, но сессия продолжает жить; вы выполняете ROLLBACK и продолжаете работать. FATAL завершает сессию, разрывая это одно подключение, пока сервер работает дальше. PANIC останавливает весь сервер. В нормальной работе граница между «ваш оператор не выполнился» и «ваше подключение потеряно» проходит между ERROR и FATAL, и почти всё, что идёт не так в повседневном SQL — опечатка, нарушение ограничения, деление на ноль — является всего лишь ERROR.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-exit_on_error.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: exit_on_error&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 27 Aug 2026 16:47:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3519.html</guid>
    
</item>
<item>
    <title>Что означают .ready и .done, и почему WAL задерживается</title>
    <link>https://sql-ex.ru/blogs/?/.ready-.done,-WAL.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/.ready-.done,-WAL.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3518</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3518</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Richard Yen, &lt;a href=&quot;https://richyen.com/postgres/2026/07/06/are_you_ready.html&quot;&gt;A practical guide to what .ready and .done mean, and why WAL sticks around&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;9:12 утра в понедельник. Кто-то из вашей команды открывает каталог pg_wal/archive_status/ во время паники по поводу хранилища и видит длинный список файлов, оканчивающихся на .ready. Возникает вопрос, который многие из нас задавали хотя бы раз: «Сломалась ли репликация?» Потоковые реплики всё ещё выглядят в основном нормально, но файлы .ready продолжают накапливаться, использование диска продолжает расти, и никто до конца не уверен, что на самом деле означают .ready и .done.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Что такое .ready и какие (если вообще какие) действия мне нужно предпринять? Давайте поговорим об этом сегодня.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;strong&gt;Подсказка: Это о доставке WAL&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Представьте доставку WAL как три независимых шага:&lt;/p&gt;&lt;br /&gt;
&lt;ol&gt;&lt;br /&gt;
    &lt;li&gt;Генерация WAL&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;Транспортировка WAL&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;Воспроизведение или потребление WAL&lt;/li&gt;&lt;br /&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;archive_command — это один из способов транспортировки. Потоковая репликация — другой. Обратите внимание, что логическая репликация также имеет канал транспортировки, но она транспортирует декодированные данные логических изменений, а не сырые файлы сегментов WAL.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/.ready-.done,-WAL.html#extended&quot;&gt;Continue reading &quot;Что означают .ready и .done, и почему WAL задерживается&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 26 Aug 2026 16:17:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3518.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: </title>
    <link>https://sql-ex.ru/blogs/?/GUC.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3517</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3517</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Christophe Pettus: &lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-event_triggers/&quot;&gt;All Your GUCs in a Row: event_triggers&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Событийный триггер (event trigger) срабатывает на события базы данных, а не на изменения строк: на ddl_command_start, sql_drop, table_rewrite и, начиная с PostgreSQL 17, на login. Они используются для аудита DDL или наложения запрета на DDL, и они идут с хорошо известным способом выстрелить себе в ногу. Напишите триггер на ddl_command_start, функция которого вызывает исключение, и теперь каждая команда DDL в базе данных завершается ошибкой, включая DROP EVENT TRIGGER, который вы использовали бы для его удаления. Документация содержит ровно этот пример — функцию abort_any_command, настроенную на прерывание всего, предположительно для того, чтобы вы узнали форму ошибки, когда уже её совершили.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: &quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 26 Aug 2026 11:09:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3517.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: event_source</title>
    <link>https://sql-ex.ru/blogs/?/GUC-event_source.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-event_source.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3516</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3516</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор:  Christophe Pettus: &lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-event_source/&quot;&gt;All Your GUCs in a Row: event_source&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;event_source — это параметр для Windows, что означает, что для большинства читающих это не делает ровно ничего. Если вы запускаете PostgreSQL на Linux или в управляемом сервисе, там нет журнала событий Windows, с которым он мог бы взаимодействовать, и эта строка навсегда остаётся со значением по умолчанию. То, что следует далее, предназначено для меньшинства пользователей Windows, и сводится к одному факту, который стоит знать.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-event_source.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: event_source&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 25 Aug 2026 16:04:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3516.html</guid>
    
</item>
<item>
    <title>Посмотрим, что делает VACUUM на уровне страницы</title>
    <link>https://sql-ex.ru/blogs/?/,-VACUUM.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/,-VACUUM.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3511</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3511</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Radim Marek: &lt;a href=&quot;https://postgr.es/p/9ol&quot;&gt;VACUUM at the Page Level&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;В &lt;a href=&quot;https://sql-ex.ru/blogs/?/HOT_UPDATE_v_PostgreSQL.html&quot;&gt;статье о HOT-обновлениях в Postgres&lt;/a&gt; мы рассмотрели, как обрезка страниц (page pruning) очищает HOT-цепочки — элегантное сокращение, с помощью которого PostgreSQL освобождает место мёртвых кортежей во время обычных операций чтения. И всё это без ожидания фонового процесса. Но обрезка — это именно сокращение. Она работает только в пределах одной страницы и только для кортежей, обновлённых через HOT. Для всего остального (холодные обновления, затрагивающие индексированные столбцы, обычные DELETE, очистка записей индексов, регистрация в карте свободного пространства, обслуживание карты видимости) необходим VACUUM.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Эта статья не будет повторять то, что VACUUM делает с эксплуатационной точки зрения. Статья &lt;a href=&quot;https://boringsql.com/posts/deletes-are-difficult/&quot;&gt;&lt;em&gt;DELETEs are difficult&lt;/em&gt;&lt;/a&gt; охватывает настройку autovacuum, распределение рабочих процессов и эксплуатационную сторону очистки мёртвых кортежей. Здесь мы будем наблюдать за работой VACUUM побайтово. Мы сделаем снимок страницы до и после каждого этапа, отслеживая, что именно меняется в заголовке страницы, указателях строк, заголовках кортежей, карте свободного пространства и карте видимости. Инструменты всё те же: pageinspect, pg_visibility и pg_freespacemap.&lt;/p&gt;&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/,-VACUUM.html#extended&quot;&gt;Continue reading &quot;Посмотрим, что делает VACUUM на уровне страницы&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 22 Aug 2026 13:12:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3511.html</guid>
    
</item>
<item>
    <title>VACUUM — это ложь (о ваших индексах)</title>
    <link>https://sql-ex.ru/blogs/?/VACUUM.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/VACUUM.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3514</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3514</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Radim Marek: &lt;a href=&quot;https://boringsql.com/posts/vacuum-is-lie/&quot;&gt;VACUUM Is a Lie (About Your Indexes)&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Существует распространённое заблуждение, которое беспокоит большинство разработчиков, использующих PostgreSQL: настройте VACUUM или запустите VACUUM, и ваша база данных останется здоровой. Мёртвые кортежи будут очищены. Идентификаторы транзакций переработаны. Пространство освобождено. Дальнейших действий не требуется.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Но есть пара «грязных» секретов, о которых люди не знают. Первый из них заключается в том, что VACUUM лжёт вам о ваших индексах.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/VACUUM.html#extended&quot;&gt;Continue reading &quot;VACUUM — это ложь (о ваших индексах)&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 24 Aug 2026 19:33:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3514.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: escape_string_warning</title>
    <link>https://sql-ex.ru/blogs/?/GUC-escape_string_warning.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-escape_string_warning.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3513</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3513</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus: &lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-escape_string_warning/&quot;&gt;All Your GUCs in a Row: escape_string_warning&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;escape_string_warning включён по умолчанию уже около двадцати лет, и на современном PostgreSQL, настроенном обычным образом, он никогда не скажет вам ни слова. Это не неисправность. Условие, о котором он предупреждает, перестало быть поведением по умолчанию в 2011 году.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-escape_string_warning.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: escape_string_warning&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 24 Aug 2026 17:26:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3513.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_tidscan</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_tidscan.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_tidscan.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3512</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3512</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus: &lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-enable_tidscan/&quot;&gt;All Your GUCs in a Row: enable_tidscan&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;enable_tidscan — это параметр enable_*, который вы почти наверняка никогда не установите, и на этот раз это не предупреждение, а просто факт о том, как происходят сканирования TID. Вы не натыкаетесь на него случайно, как на последовательное сканирование или сортировку. Сканирование TID появляется только тогда, когда вы явно написали условие на ctid, поэтому тип плана, которым управляет этот параметр, появляется именно тогда, когда вы его запросили, и никак иначе.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;(Для протокола: я за всю свою жизнь ни разу не видел узел tidscan.)&lt;/p&gt;&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_tidscan.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_tidscan&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 23 Aug 2026 16:44:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3512.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_sort</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_sort.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_sort.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3510</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3510</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9pm&quot;&gt;All Your GUCs in a Row: enable_sort&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Обращение к enable_sort = off, потому что в запросе есть медленная сортировка, обычно бьёт мимо цели. Когда сортировка медленная, это обычно происходит из-за того, что она сбрасывается на диск, что является проблемой work_mem. Если сортировки вообще не должно быть, исправление — это индекс. enable_sort не изменяет ни одного из этих факторов, и его отключение редко бывает тем, что вам действительно нужно.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_sort.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_sort&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 22 Aug 2026 13:02:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3510.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_seqscan</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_seqscan.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_seqscan.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3508</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3508</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Christophe Pettus: &lt;a href=&quot;https://postgr.es/p/9pi&quot;&gt;All Your GUCs in a Row: enable_seqscan&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;enable_seqscan не отключает последовательные сканирования. Он не может этого сделать, и никогда не был для этого предназначен. В документации прямо сказано: последовательные сканирования невозможно полностью подавить, потому что иногда чтение всей таблицы является единственным способом ответить на запрос. На самом деле, значение off говорит планировщику избегать последовательного сканирования, только когда у него есть любая другая альтернатива. Это &lt;em&gt;диагностическая&lt;/em&gt; инструкция, а не конфигурационная, и это различие — весь смысл данного параметра.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;По умолчанию включён, контекст — пользовательский. Вы отключаете его в сессии, чтобы задать вопрос планировщику. Вы &lt;em&gt;никогда&lt;/em&gt; не отключаете его в postgresql.conf, и мы объясним почему.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_seqscan.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_seqscan&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 21 Aug 2026 18:27:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3508.html</guid>
    
</item>
<item>
    <title>Анализ причин бага контрольной точки PostgreSQL</title>
    <link>https://sql-ex.ru/blogs/?/PostgreSQL.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/PostgreSQL.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3507</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3507</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: &lt;a href=&quot;https://stormatics.tech/author/warda-bibi&quot;&gt;Warda Bibi&lt;/a&gt;, &lt;a href=&quot;https://stormatics.tech/blogs/postgresql-checkpointer-bug-causing-infinite-retry-loop&quot;&gt;Inside a PostgreSQL Checkpointer Bug: A Production Postmortem&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;В одной из производственных баз данных PostgreSQL 16.8 нашего клиента в журнале начала появляться ошибка, похожая на ошибку памяти:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre lang=&quot;sql&quot;&gt;&lt;code&gt;ERROR: invalid memory alloc request size&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Ошибка сразу указывала на двух вероятных виновников:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
    &lt;li&gt;Исчерпание памяти&lt;/li&gt;&lt;br /&gt;
    &lt;li&gt;Повреждение памяти&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Как оказалось, ни то, ни другое не было причиной. Вместо этого мы столкнулись с известной ошибкой PostgreSQL, которая заперла процесс контрольной точки (checkpointer) в бесконечном цикле повторных попыток. Единственным способом восстановления была принудительная перезагрузка, за которой последовало длительное воспроизведение WAL во процессе аварийного восстановления.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Эта статья объясняет, что произошло, почему ручные контрольные точки не могли это исправить, и как обновление до минорной версии PostgreSQL окончательно решило проблему.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/PostgreSQL.html#extended&quot;&gt;Continue reading &quot;Анализ причин бага контрольной точки PostgreSQL&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 20 Aug 2026 19:13:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3507.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_self_join_elimination</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_self_join_elimination.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_self_join_elimination.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3506</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3506</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Christophe Pettus: &lt;a href=&quot;https://postgr.es/p/9pg&quot;&gt;All Your GUCs in a Row: enable_self_join_elimination&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Вы редко являетесь единственным, кто пишет ваш SQL. Ваша ORM пишет часть его, ваши вложенные представления пишут ещё больше, и рано или поздно одно из них соединяет таблицу саму с собой по её собственному первичному ключу. Это соединение возвращает ровно те строки, с которых началось. enable_self_join_elimination — это оптимизация PostgreSQL 18, которая замечает и удаляет такое соединение.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_self_join_elimination.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_self_join_elimination&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 20 Aug 2026 16:41:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3506.html</guid>
    
</item>
<item>
    <title>Сброс последовательности PostgreSQL: объяснение START With против RESTART With или SETVAL</title>
    <link>https://sql-ex.ru/blogs/?/PostgreSQL-START-With-RESTART-With-SETVAL.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/PostgreSQL-START-With-RESTART-With-SETVAL.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3505</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3505</wfw:commentRss>
    

    <author>nospam@example.com (Sergey Moiseenko)</author>
    <content:encoded>
    &lt;p style=&quot;margin: 0px 25px; font-size: 9pt;&quot;&gt;Пересказ статьи &lt;a class=&quot;let&quot; href=&quot;https://databaserookies.wordpress.com/2026/03/21/postgresql-sequence-reset-start-with-vs-restart-with-vs-setval-explained/&quot;&gt;PostgreSQL Sequence Reset: START WITH vs RESTART WITH vs SETVAL Explained&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
Недавно во время одной из миграций Oracle на PostgreSQL с корпоративным клиентом при разработке резервного модуля runbook мы оценивали шаги по выполнению сброса значения последовательности для соответствия исходному значению так, чтобы каждый новый запрос значения с использованием NextVal был новым и не приводил к сбою транзакций.&lt;br /&gt;
&lt;br /&gt;
Это один из критических шагов любой миграции базы данных, т.к. в большинстве случаев последовательность LAST_VALUE не переносится в целевой объект неявно, а значения последовательности должны совпадать с источником, чтобы новая транзакция никогда не завершалась неудачей и приложение работало после переключения.&lt;br /&gt;
&lt;br /&gt;
Мы использовали экспорт SEQUENCE_VALUES в ora2pg для генерации команд DDL, чтобы установить последние значения последовательностей.&lt;br /&gt;
&lt;br /&gt;
Пример команды Ora2pg для экспорта DDL последовательности. &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/PostgreSQL-START-With-RESTART-With-SETVAL.html#extended&quot;&gt;Continue reading &quot;Сброс последовательности PostgreSQL: объяснение START With против RESTART With или SETVAL&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 20 Aug 2026 10:52:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3505.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_presorted_aggregate</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_presorted_aggregate.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_presorted_aggregate.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3504</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3504</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9ph&quot;&gt;All Your GUCs in a Row: enable_presorted_aggregate&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;enable_presorted_aggregate включён, он включён с момента появления в PostgreSQL 16, и самое полезное, что вы когда-либо сделаете с ним, — это отключите его ровно для одного запроса.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;По умолчанию включён, контекст — пользовательский: может быть установлен для сессии, роли, базы данных или встроен в одну транзакцию. Последний вариант — это и есть вся рекомендация, так что запомните его.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_presorted_aggregate.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_presorted_aggregate&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 19 Aug 2026 17:53:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3504.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_partitionwise_join</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_partitionwise_join.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_partitionwise_join.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3503</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3503</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9p1&quot;&gt;All Your GUCs in a Row: enable_partitionwise_join&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;«Собрат» параметра &lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_partitionwise_aggregate.html&quot;&gt;enable_partitionwise_aggregate&lt;/a&gt;, и он разделяет его определяющую черту: по умолчанию он выключен, и по той же причине. Поэтому, чтобы не повторять полностью аргументацию о том, почему он выключен по умолчанию, в этом посте рассматривается, что здесь отличается — механизм, преимущество, которого нет у версии для агрегации, и предусловие, достаточно строгое, чтобы быть главной причиной, по которой функция не срабатывает, когда люди её ожидают. По умолчанию выключен, контекст — пользовательский. Как и его «собрат», включение этого параметра — это реальное решение по настройке, а не диагностический зонд.&lt;/p&gt;&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_partitionwise_join.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_partitionwise_join&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 18 Aug 2026 14:45:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3503.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_partition_pruning</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_partition_pruning.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_partition_pruning.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3502</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3502</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9on&quot;&gt;All Your GUCs in a Row: enable_partition_pruning&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Один из действительно важных параметров секционирования, который стоит понимать, а не просто оставлять включённым, — потому что он выполняет свою работу в два разных момента, и разница между ними определяет, насколько он может помочь вашим запросам. По умолчанию включён, контекст пользовательский, и он относится к тому же семейству, что и &lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_async_append.html&quot;&gt;enable_async_append&lt;/a&gt;: это диагностический инструмент, а не регулятор настройки. Это параметр, который позволяет PostgreSQL пропускать сканирование разделов, которые не могут содержать строки, нужные запросу.&lt;/p&gt;&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_partition_pruning.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_partition_pruning&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 17 Aug 2026 16:04:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3502.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_partitionwise_aggregate</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_partitionwise_aggregate.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_partitionwise_aggregate.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3499</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3499</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9oz&quot;&gt;All Your GUCs in a Row: enable_partitionwise_aggregate&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Оптимизация для секционирования и примечательное исключение в семействе enable_*: по умолчанию она выключена. Почти все остальные члены семейства по умолчанию включены и существуют для того, чтобы вы могли отключить возможность для диагностики; этот же по умолчанию выключен и существует для того, чтобы вы могли включить его, когда решите, что оно стоит затрат. Это обратное поведение — и стоимость, которая его мотивирует, — составляют суть данного поста. Контекст — пользовательский. И в отличие от большинства членов семейства, изменение этого параметра — это легитимное решение по настройке, а не просто диагностический зонд.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_partitionwise_aggregate.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_partitionwise_aggregate&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 16 Aug 2026 11:49:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3499.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_parallel_hash</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_parallel_hash.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_parallel_hash.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3500</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3500</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9o8&quot;&gt;All Your GUCs in a Row: enable_parallel_hash&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Переключатель для параллельных запросов, уточняющий хэш-соединение из статьи про enable_hashjoin, и он требует точности, потому что «хэш-соединение, выполняемое параллельно» и «параллельное хэш-соединение» — это две действительно разные вещи. По умолчанию включён, контекст пользовательский, и он относится к тому же семейству, что и &lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_async_append.html&quot;&gt;enable_async_append&lt;/a&gt;: это диагностический инструмент, а не регулятор настройки.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_parallel_hash.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_parallel_hash&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 16 Aug 2026 12:03:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3500.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_parallel_append</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_parallel_append.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_parallel_append.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3498</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3498</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, All Your GUCs in a Row: enable_parallel_append&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Возвращаемся к параллельным запросам и параметру, который легко спутать с первым в этом семействе. &lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_async_append.html&quot;&gt;enable_async_append&lt;/a&gt; был посвящён параллельному выполнению внешних сканирований на удалённых серверах. Параметр enable_parallel_append касается параллельного выполнения локальных дочерних узлов Append на рабочих процессах. Разный механизм, другая задача, похожее название. По умолчанию включён, контекст пользовательский, и он относится к тому же семейству: это диагностический инструмент, а не регулятор настройки.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_parallel_append.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_parallel_append&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 15 Aug 2026 14:09:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3498.html</guid>
    
</item>
<item>
    <title>Слишком много таблиц — это плохо</title>
    <link>https://sql-ex.ru/blogs/?/unknown.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/unknown.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3497</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3497</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Laurenz Albe, &lt;a href=&quot;https://postgr.es/p/9nN&quot;&gt;Too many tables are bad for you&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Недавно я помогал заказчику расследовать проблемы с базой данных. Оказалось, что эти проблемы тянутся от слишком большого количества таблиц в базе данных. Поскольку это для многих может стать неожиданностью, я решил, что стоит написать об этом.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/unknown.html#extended&quot;&gt;Continue reading &quot;Слишком много таблиц — это плохо&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 15 Aug 2026 13:45:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3497.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_nestloop</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_nestloop.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_nestloop.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3495</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3495</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9n_&quot;&gt;All Your GUCs in a Row: enable_nestloop&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Последний из трёх переключателей стратегий соединения и в некотором смысле самый важный, потому что вложенный цикл (nested loop) — это одновременно и простейшее соединение в PostgreSQL, и источник самого печально известного катастрофического падения производительности. Три алгоритма были представлены в статье про &lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_hashjoin.html&quot;&gt;enable_hashjoin&lt;/a&gt;; этот пост завершает серию. По умолчанию включён, контекст — пользовательский, и он относится к тому же семейству, что и &lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_async_append.html&quot;&gt;enable_async_append&lt;/a&gt;: это диагностический инструмент, а не регулятор настройки.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_nestloop.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_nestloop&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 13 Aug 2026 18:55:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3495.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_mergejoin</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_mergejoin.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_mergejoin.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3494</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3494</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9nZ&quot;&gt;All Your GUCs in a Row: enable_mergejoin&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Второй из трёх переключателей стратегий соединения. Три алгоритма были изложены в статье про &lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_hashjoin.html&quot;&gt;enable_hashjoin&lt;/a&gt; — вложенный цикл, соединение слиянием и хэш-соединение, — так что здесь мы углубимся в средний из них. По умолчанию включён, контекст — пользовательский, и он относится к тому же семейству, что и &lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_async_append.html&quot;&gt;enable_async_append&lt;/a&gt;: это диагностический инструмент, а не регулятор настройки.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_mergejoin.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_mergejoin&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 12 Aug 2026 17:18:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3494.html</guid>
    
</item>
<item>
    <title>Обновление кластеров PostgreSQL 19 стало ещё более бесшовным</title>
    <link>https://sql-ex.ru/blogs/?/PostgreSQL-19.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/PostgreSQL-19.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3493</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3493</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: &lt;a href=&quot;https://www.postgresql.fastware.com/blog/author/vigneshwaran-c&quot;&gt;Vigneshwaran C&lt;/a&gt; , &lt;a href=&quot;https://www.postgresql.fastware.com/blog/closing-a-critical-gap-in-postgresql-upgrade-workflows-with-sequence-synchronization&quot;&gt;Closing a critical gap in PostgreSQL upgrade workflows with sequence synchronization&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Обновление кластеров PostgreSQL 19 стало более плавным благодаря таким инструментам, как &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;pg_upgrade&lt;/span&gt;&lt;/code&gt; и &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;pg_createsubscriber&lt;/span&gt;&lt;/code&gt;, которые вместе обеспечивают обновление с практически нулевым временем простоя, сначала преобразуя физические реплики в логических подписчиков, а затем выполняя обновление с минимальным прерыванием обслуживания.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Однако этот подход обнажает давний пробел в логической репликации: состояние последовательностей (sequence state) не реплицируется.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;В этой статье мы рассмотрим реальный сценарий обновления, покажем, где именно всё может пойти не так, и объясним, как новая функция синхронизации последовательностей в PostgreSQL 19 делает весь процесс безопасным для промышленной эксплуатации.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
&lt;p&gt;Узнайте, как PostgreSQL 19 улучшает процессы обновления благодаря внедрению синхронизации последовательностей, обеспечивая безопасные и бесшовные переходы при обновлении баз данных.&lt;/p&gt;&lt;br /&gt;
&lt;/blockquote&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/PostgreSQL-19.html#extended&quot;&gt;Continue reading &quot;Обновление кластеров PostgreSQL 19 стало ещё более бесшовным&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 11 Aug 2026 17:38:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3493.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_material и enable_memoize</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_material-enable_memoize.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_material-enable_memoize.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3492</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3492</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9nS&quot;&gt;All Your GUCs in a Row: enable_material and enable_memoize&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Два переключателя enable_* для двух узлов плана, которые оба, условно говоря, кешируют строки, чтобы избежать повторных вычислений, — именно поэтому их путают, и именно поэтому их стоит рассматривать вместе. Они не являются вариациями одной идеи. Materialize — это «тупой» буфер; Memoize — это «умный» кеш. Суть этого поста — чётко зафиксировать это различие. Оба параметра включены по умолчанию, оба относятся к пользовательскому контексту, и оба находятся в том же семействе, что и &lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_async_append.html&quot;&gt;enable_async_append&lt;/a&gt;: это диагностические инструменты, а не регуляторы настройки производительности.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_material-enable_memoize.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_material и enable_memoize&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 11 Aug 2026 11:42:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3492.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_indexonlyscan</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_indexonlyscan.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_indexonlyscan.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3491</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3491</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9nM&quot;&gt;All Your GUCs in a Row: enable_indexonlyscan&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Третий способ использования индекса, после обычного индексного сканирования и сканирования битовой карты из &lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_indexscan_i_enable_bitmapscan.html&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;enable_indexscan&lt;/span&gt;&lt;/code&gt; и &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;enable_bitmapscan&lt;/span&gt;&lt;/code&gt;&lt;/a&gt;, — и тот, у которого есть наиболее неправильно понимаемый «подвох», потому что сканирование только по индексу может быть физически возможным, но всё равно заканчиваться чтением кучи почти для каждой строки. Почему это происходит, и есть суть этого поста. По умолчанию включён, контекст — &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;user&lt;/span&gt;&lt;/code&gt;, с тем же обрамлением семейства, что и у &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_async_append.html&quot;&gt;enable_async_append&lt;/a&gt;&lt;/span&gt;&lt;/code&gt;: диагностический инструмент, а не регулировочная ручка.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_indexonlyscan.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_indexonlyscan&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 10 Aug 2026 13:51:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3491.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_incremental_sort</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_incremental_sort.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_incremental_sort.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3489</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3489</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9ny&quot;&gt;All Your GUCs in a Row: enable_incremental_sort&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Действительно хорошая функциональность скрывается за этим переключателем, что делает его одним из наиболее интересных параметров семейства &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;enable_*&lt;/span&gt;&lt;/code&gt; для понимания, — и одним из немногих, у кого есть известный сценарий отказа, который стоит распознавать. По умолчанию включён, контекст — &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;user&lt;/span&gt;&lt;/code&gt;, с тем же обрамлением семейства, что и у &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_async_append.html&quot;&gt;enable_async_append&lt;/a&gt;&lt;/span&gt;&lt;/code&gt;: диагностический инструмент, а не регулировочная ручка. Инкрементальная сортировка появилась в PostgreSQL 13 (Томаш Вондра и Джеймс Коулман), и когда она помогает, она помогает очень сильно.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_incremental_sort.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_incremental_sort&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 07 Aug 2026 11:57:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3489.html</guid>
    
</item>
<item>
    <title>pg_stats: как работает внутренняя статистика Postgres</title>
    <link>https://sql-ex.ru/blogs/?/pg_stats-Postgres.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/pg_stats-Postgres.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3487</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3487</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: &lt;a href=&quot;https://richyen.com/&quot;&gt;Richard Yen&lt;/a&gt;, &lt;a href=&quot;https://richyen.com/postgres/2026/06/22/pg_stats_how_postgres_internal_stats_work.html&quot;&gt;pg_stats: How Postgres Internal Stats Work&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Недавно мне выпала честь выступить на POSETTE 2026 с докладом о pg_stats и о том, как работает внутренняя статистика Postgres (&lt;a href=&quot;https://www.youtube.com/watch?v=w5YcY5c5c5c&quot;&gt;запись на YouTube&lt;/a&gt;). Эта статья является письменным дополнением к тому докладу и предназначен для того, чтобы дать вам рабочее понимание того, что такое pg_stats, как он заполняется и как он влияет на решения, которые планировщик запросов принимает от вашего имени.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/pg_stats-Postgres.html#extended&quot;&gt;Continue reading &quot;pg_stats: как работает внутренняя статистика Postgres&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 06 Aug 2026 13:24:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3487.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_hashjoin</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_hashjoin.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_hashjoin.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3488</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3488</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;All Your GUCs in a Row: enable_hashjoin&quot;&gt;All Your GUCs in a Row: enable_hashjoin&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Первый из трёх переключателей стратегий соединения, поэтому прежде чем перейти к параметру, — один абзац о том, внутри чего он находится: в PostgreSQL есть ровно три способа соединения двух таблиц, и для каждого соединения в каждом запросе планировщик выбирает один из них. Три переключателя &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;enable_*&lt;/span&gt;&lt;/code&gt; для соединений — этот, &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-enableasyncappend/&quot;&gt;enable_mergejoin&lt;/a&gt;&lt;/span&gt;&lt;/code&gt; и &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;https://thebuild.com/blog/all-your-gucs-in-a-row-enableasyncappend/&quot;&gt;enable_nestloop&lt;/a&gt;&lt;/span&gt;&lt;/code&gt; — позволяют вам убрать один вариант со стола и посмотреть, что планировщик выберет вместо него. То же правило семейства, что и всегда (&lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_async_append.html&quot;&gt;enable_async_append&lt;/a&gt;&lt;/span&gt;&lt;/code&gt;): диагностические инструменты, а не регулировочные ручки. По умолчанию включён, контекст — &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;user&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_hashjoin.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_hashjoin&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 06 Aug 2026 21:23:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3488.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_gathermerge</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_gathermerge.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_gathermerge.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3485</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3485</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9nm&quot;&gt;All Your GUCs in a Row: enable_gathermerge&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Переключатель параллельных запросов и один из наиболее интересных членов семейства &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;enable_*&lt;/span&gt;&lt;/code&gt; для переключения, потому что то, что он отключает, имеет чистое, предсказуемое замещение. По умолчанию включён, контекст — &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;user&lt;/span&gt;&lt;/code&gt;, с тем же предостережением семейства, что и у &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;https://sql-ex.ru/blogs/?/Vsjo_o_GUC_po_porJadku_enable_async_append.html&quot;&gt;enable_async_append&lt;/a&gt;&lt;/span&gt;&lt;/code&gt;: диагностический инструмент, а не регулировочная ручка.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_gathermerge.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_gathermerge&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 04 Aug 2026 18:03:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3485.html</guid>
    
</item>
<item>
    <title>Оптимизация полиморфных ассоциаций в PostgreSQL</title>
    <link>https://sql-ex.ru/blogs/?/PostgreSQL.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/PostgreSQL.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3484</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3484</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Андрей Лепихов,&lt;a href=&quot;https://postgr.es/p/9mA&quot;&gt;Optimising Polymorphic Associations in PostgreSQL&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Недавно я &lt;a href=&quot;https://open.substack.com/pub/danolivo/p/on-polymorphic-associations-in-postgres?r=34q1yy&amp;utm_campaign=post-expanded-share&amp;utm_medium=web&quot;&gt;исследовал&lt;/a&gt;, насколько распространены полиморфные ассоциации в реляционных базах данных — это враждебный производительности паттерн, построенный вокруг дискриминированного внешнего ключа, который автоматически генерируют ORM (Rails, Django, Hibernate), CRM-платформы (Salesforce) и 1C. Главная страница типичного интернет-магазина или лента активности CRM построены именно на таком запросе: базовая таблица соединяется через &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;LEFT JOIN&lt;/span&gt;&lt;/code&gt; со всеми возможными подтипами через пару столбцов &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;(type, id)&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Та предыдущая статья отвечала на вопрос «насколько распространён этот паттерн?» В конце концов, если вы собираетесь что-то улучшать, полезно знать, насколько полезным будет улучшение, верно? Здесь я хочу дать представление о том, как этот паттерн приводит к снижению производительности, и указать направления в оптимизаторе PostgreSQL, которые могли бы облегчить ситуацию.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;strong&gt;Спойлер:&lt;/strong&gt; пока немногое реализовано — но кое-что движется в &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;pgsql-hackers&lt;/span&gt;&lt;/code&gt;. Три патча, обсуждавшихся в 2024–2026 годах, нацелены на три разных источника снижения производительности. Каждый из них описан ниже.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/PostgreSQL.html#extended&quot;&gt;Continue reading &quot;Оптимизация полиморфных ассоциаций в PostgreSQL&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 04 Aug 2026 13:57:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3484.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_distinct_reordering и enable_group_by_reordering</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_distinct_reordering-enable_group_by_reordering.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_distinct_reordering-enable_group_by_reordering.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3483</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3483</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus,&lt;a href=&quot;https://postgr.es/p/9nj&quot;&gt; All Your GUCs in a Row: enable_distinct_reordering and enable_group_by_reorderin&lt;/a&gt;g&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Два самых молодых члена семейства &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;enable_*&lt;/span&gt;&lt;/code&gt; и естественная пара: оба позволяют планировщику переупорядочивать ключи многоключевой операции, чтобы удешевить сортировку, и оба включены по умолчанию, имеют контекст &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;user&lt;/span&gt;&lt;/code&gt; и несут предостережение семейства &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;enable_*&lt;/span&gt;&lt;/code&gt; из &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;enable_async_append&lt;/span&gt;&lt;/code&gt; — диагностические зонды, а не производственные регулировочные ручки.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Идея, стоящая за обоими, одна и та же, и она хороша. Когда вы пишете &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;GROUP BY a, b, c&lt;/span&gt;&lt;/code&gt; или &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;SELECT DISTINCT a, b, c&lt;/span&gt;&lt;/code&gt;, порядок, в котором вы перечислили эти столбцы, не несёт семантического смысла, — группировка и поиск уникальных значений дают один и тот же результат независимо от того, какой ключ сравнивается первым. Но порядок имеет огромное значение для стоимости. Если операция выполняется путём сортировки, сравнение сначала дешёвого для сравнения столбца с высокой кардинальностью означает, что большинство сравнений завершаются на первом ключе и никогда не затрагивают остальные; начните с дорогого текстового столбца с учётом локали, и вы заплатите стоимость его сравнения для каждой строки. А если другая часть запроса — &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;ORDER BY&lt;/span&gt;&lt;/code&gt;, индекс, уже выдающий строки в определённом порядке, — хочет получить данные, отсортированные определённым образом, согласование с этим порядком позволяет планировщику повторно использовать сортировку, которую он всё равно собирался выполнить, или полностью пропустить её с помощью &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;incremental sort&lt;/span&gt;&lt;/code&gt;. Таким образом, планировщик, получив свободу переставлять ключи, порядок которых не влияет на корректность, иногда может найти значительно более дешёвую схему, чем та, которую вы написали.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Обе оптимизации имеют важное свойство безопасности, которое стоит чётко сформулировать: они всегда сохраняют указанный вами порядок как один из кандидатов, исходя из предположения, что вы можете знать что-то, чего не знает планировщик. Переупорядочение — это то, что планировщик &lt;em&gt;может&lt;/em&gt; сделать, если найдёт более дешёвую перестановку, а не то, что он навязывает вам.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_distinct_reordering-enable_group_by_reordering.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_distinct_reordering и enable_group_by_reordering&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 03 Aug 2026 11:27:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3483.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_indexscan и enable_bitmapscan</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_indexscan-enable_bitmapscan.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_indexscan-enable_bitmapscan.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3480</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3480</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9nd&quot;&gt;All Your GUCs in a Row: enable_indexscan and enable_bitmapscan&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Ещё два переключателя планировщика из семейства &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;enable_*&lt;/span&gt;&lt;/code&gt;, и они идут вместе, потому что то, что они отключают, в обоих случаях является индексом, — разница заключается в том, как используется индекс. Оба включены по умолчанию, оба имеют контекст &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;user&lt;/span&gt;&lt;/code&gt;, и оба несут предупреждение из семейства параметров &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;enable_*&lt;/span&gt;&lt;/code&gt; от &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;enable_async_append&lt;/span&gt;&lt;/code&gt;: это диагностические инструменты, а не регулировочные ручки. Вы переключаете их в сеансе, чтобы увидеть второй выбор планировщика, а не в &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;postgresql.conf&lt;/span&gt;&lt;/code&gt;, чтобы принудительно навязать своё решение.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Причина рассматривать их как пару заключается в том, что понимание того, когда обращаться к одному из них, требует понимания границы между ними.&lt;/p&gt;&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_indexscan-enable_bitmapscan.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_indexscan и enable_bitmapscan&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 30 Jul 2026 14:17:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3480.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: enable_async_append</title>
    <link>https://sql-ex.ru/blogs/?/GUC-enable_async_append.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-enable_async_append.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3474</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3474</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9n9&quot;&gt;All Your GUCs in a Row: enable_async_append&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Мы подошли к семейству параметров &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;enable_*&lt;/span&gt;&lt;/code&gt; — более чем двум десяткам переключателей планировщика, которые по умолчанию включены и объединены одним важнейшим свойством: они не являются регулировочными ручками. Это диагностические инструменты. Каждый из них отключает способность планировщика рассматривать определённый тип плана, и причина, по которой такая возможность существует, заключается в том, чтобы инженер, преследующий «плохой» план, мог заставить планировщик показать свою вторую альтернативу, — спросить: «Что бы ты сделал, если бы этот тип узла был недоступен?» Отключение одного из них в рабочей среде для ускорения запроса почти всегда является ошибкой; на самом деле вы хотите понять, почему планировщик предпочёл план, который вам не понравился, и эти переключатели — способ его «допроса». Каждая статья в этом семействе будет повторять некоторую версию этого предупреждения, потому что каждый из этих параметров используется неправильно одинаковым образом.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-enable_async_append.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: enable_async_append&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 21 Jul 2026 09:44:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3474.html</guid>
    
</item>
<item>
    <title>Истории про отказ multixact из-за циклического переполнения, повреждение TOAST и оборванные страницы</title>
    <link>https://sql-ex.ru/blogs/?/multixact-,-TOAST.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/multixact-,-TOAST.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3473</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3473</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: &lt;a href=&quot;https://payalsingh.me/&quot;&gt;Payal Singh&lt;/a&gt;,&lt;a href=&quot;https://payalsingh.me/blog/2026/06/16/postgres-war-stories-2-silent-corruption/&quot;&gt;Postgres War Stories Part 2: multixact wraparound, TOAST corruption, and torn pages&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;em&gt;Три способа, которыми внутри Postgres портятся данные, не оставляя следов в журнале, и задачи, которые выявляют это раньше пользователей.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;a href=&quot;https://payalsingh.me/blog/2026/05/27/postgres-war-stories-1-the-bugs-that-arent-postgres/&quot;&gt;Первая част&lt;/a&gt;ь была посвящена сбоям, которые начинаются на уровень ниже Postgres: ядро, glibc, аллокатор страниц. Эта статья — о худшем классе, когда сбой происходит внутри самого Postgres. Журналы чисты. Восстановление никогда не запускается. И запрос либо возвращает неверный ответ, либо «роняет» строки, которые всё ещё лежат на диске.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Три инцидента ниже не имеют ничего общего, кроме того, что делает их опасными: нет ошибки, на которую можно было бы настроить оповещение. Переполнение счётчика multixact, отсутствующий фрагмент TOAST, оборванная страница на диске — ничто из этого не подаёт сигнала. База данных не знает, что она неверна. Вы либо планируете задачу, которая будет это искать, либо узнаёте об этом, когда пользователь сообщает, что строки, которую он клянётся, что она была, больше нет.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Так что эта статья — наполовину про инциденты, наполовину про обнаружение. Обнаружение — вот в чём суть.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/multixact-,-TOAST.html#extended&quot;&gt;Continue reading &quot;Истории про отказ multixact из-за циклического переполнения, повреждение TOAST и оборванные страницы&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 19 Jul 2026 13:51:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3473.html</guid>
    
</item>
<item>
    <title>Почему в Postgres нет synchronous_commit=remote_receive?</title>
    <link>https://sql-ex.ru/blogs/?/Postgres-synchronous_commitremote_receive.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/Postgres-synchronous_commitremote_receive.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3471</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3471</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: &lt;a href=&quot;https://www.blogger.com/profile/02748267202194708735&quot;&gt;Robins Tharakan&lt;/a&gt;,&lt;a href=&quot;https://www.robins.in/2026/06/why-postgres-doesnt-have-remotereceive.html&quot;&gt;Why Postgres Doesn&#039;t Have synchronous_commit=remote_receive?&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;В распределённых средах баз данных баланс между долговечностью и производительностью — это постоянная борьба. Параметр &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;synchronous_commit&lt;/span&gt;&lt;/code&gt; в PostgreSQL находится в центре этого вопроса, давая администраторам возможность выбирать, когда именно команда &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;COMMIT&lt;/span&gt;&lt;/code&gt; возвращает успех клиенту.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Идея &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;remote_receive&lt;/span&gt;&lt;/code&gt; родилась из простого вопроса: даёт ли пропуск записи на диск на резервном сервере измеримый, реальный прирост производительности? Ожидая только получения байтов WAL в памяти резервного сервера, можно ли получить значительное улучшение по сравнению с &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;remote_write&lt;/span&gt;&lt;/code&gt;? Я взялся реализовать и протестировать эту возможность, чтобы выяснить это.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;За этим последовало путешествие по задержкам сети, кэшу страниц ОС, «перегрузке» планировщика ЦП и шуму при бенчмаркинге. Вот подробности реализации, тестов, первоначальных аномалий и итоговых результатов.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/Postgres-synchronous_commitremote_receive.html#extended&quot;&gt;Continue reading &quot;Почему в Postgres нет synchronous_commit=remote_receive?&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 18 Jul 2026 13:22:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3471.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: effective_io_concurrency</title>
    <link>https://sql-ex.ru/blogs/?/GUC-effective_io_concurrency.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-effective_io_concurrency.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3472</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3472</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9mD&quot;&gt;All Your GUCs in a Row: effective_io_concurrency&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Большинство параметров, меняющихся между версиями, меняют своё значение по умолчанию. &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;effective_io_concurrency&lt;/span&gt;&lt;/code&gt; — более редкий случай: он дважды менял своё значение, и то, чем он управляет в PostgreSQL 18, отличается от того, чем он управлял в 17, что в свою очередь отличалось от того, что он означал до 13. Значение, скопированное вами из руководства по настройке 2019 года в современный кластер, не просто устарело — оно может отвечать на вопрос, который PostgreSQL больше не задаёт. Поэтому этот параметр лучше всего объяснять в виде истории. Текущее состояние, чтобы задать точку отсчёта: значение по умолчанию — 16, контекст — &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;user&lt;/span&gt;&lt;/code&gt;, диапазон от 0 до 1000, где 0 отключает функцию.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-effective_io_concurrency.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: effective_io_concurrency&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 19 Jul 2026 13:13:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3472.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: effective_cache_size</title>
    <link>https://sql-ex.ru/blogs/?/GUC-effective_cache_size.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-effective_cache_size.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3470</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3470</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9mB&quot;&gt;All Your GUCs in a Row: effective_cache_size&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Это один из наиболее последовательно неправильно понимаемых параметров PostgreSQL, и непонимание всегда имеет одну и ту же форму: люди верят, что &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;effective_cache_size&lt;/span&gt;&lt;/code&gt; что-то делает с памятью. Он выделяет кэш. Он резервирует оперативную память. Он управляет тем, сколько PostgreSQL держит в памяти. Он не делает ничего из этого. Он не выделяет ничего, не резервирует ничего и вообще не меняет поведение во время выполнения. Это всего лишь одно число, переданное планировщику запросов, и его единственный эффект — изменять то, какие планы планировщик считает дешёвыми. Значение по умолчанию — 4 ГБ, контекст — &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;user&lt;/span&gt;&lt;/code&gt;, и он заслуживает большего, чем обычное количество слов, потому что ошибиться с ним так легко и это так тихо и дорого обходится.&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-effective_cache_size.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: effective_cache_size&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 18 Jul 2026 12:34:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3470.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: dynamic_shared_memory_type</title>
    <link>https://sql-ex.ru/blogs/?/GUC-dynamic_shared_memory_type.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-dynamic_shared_memory_type.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3468</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3468</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9ma&quot;&gt;All Your GUCs in a Row: dynamic_shared_memory_type&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;dynamic_shared_memory_type&lt;/span&gt;&lt;/code&gt; выбирает механизм операционной системы, который PostgreSQL использует для динамической разделяемой памяти — памяти, выделяемой после запуска, в отличие от фиксированной области &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;shared_buffers&lt;/span&gt;&lt;/code&gt;, которая выделяется один раз при загрузке. Контекст — &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;postmaster&lt;/span&gt;&lt;/code&gt;, поэтому для изменения требуется перезапуск, а значение по умолчанию выбирается &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;initdb&lt;/span&gt;&lt;/code&gt; в зависимости от поддержки вашей платформы: &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;posix&lt;/span&gt;&lt;/code&gt; в Linux и большинстве Unix, &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;windows&lt;/span&gt;&lt;/code&gt; в Windows. Вероятно, вы никогда не будете устанавливать его намеренно. Однако вы можете столкнуться с проблемой в контейнере, и это часть, заслуживающая вашего внимания.&lt;/p&gt;&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-dynamic_shared_memory_type.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: dynamic_shared_memory_type&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 17 Jul 2026 17:04:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3468.html</guid>
    
</item>
<item>
    <title>Всё о GUC по порядку: dynamic_library_path</title>
    <link>https://sql-ex.ru/blogs/?/GUC-dynamic_library_path.html</link>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/GUC-dynamic_library_path.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3467</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3467</wfw:commentRss>
    

    <author>nospam@example.com (mssqlhelp)</author>
    <content:encoded>
    &lt;p&gt;Автор: Christophe Pettus, &lt;a href=&quot;https://postgr.es/p/9ma&quot;&gt;All Your GUCs in a Row: dynamic_library_path&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;dynamic_library_path&lt;/span&gt;&lt;/code&gt; указывает PostgreSQL, где искать загружаемый C-модуль, когда что-то — &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;CREATE FUNCTION ... LANGUAGE C&lt;/span&gt;&lt;/code&gt;, команда &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;LOAD&lt;/span&gt;&lt;/code&gt;, запись в &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;shared_preload_libraries&lt;/span&gt;&lt;/code&gt; — указывает библиотеку по простому имени файла без пути. Значение по умолчанию — &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;$libdir&lt;/span&gt;&lt;/code&gt;, контекст — &lt;code&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;superuser&lt;/span&gt;&lt;/code&gt;, и большую часть своей жизни этот параметр был тем, к чему никто не прикасался. PostgreSQL 18 дал ему повод снова стать важным, и к этому мы в итоге и придём.&lt;/p&gt;&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/GUC-dynamic_library_path.html#extended&quot;&gt;Continue reading &quot;Всё о GUC по порядку: dynamic_library_path&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 16 Jul 2026 22:09:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3467.html</guid>
    
</item>
<item>
    <title>Столбцы JSONB и TOAST в Postgres: пособие по производительности</title>
    <link>https://sql-ex.ru/blogs/?/JSONB-TOAST-Postgres.html</link>
            <category>Optimization</category>
            <category>PostgreSQL</category>
    
    <comments>https://sql-ex.ru/blogs/?/JSONB-TOAST-Postgres.html#comments</comments>
    <wfw:comment>https://sql-ex.ru/blogs/wfwcomment.php?cid=3466</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://sql-ex.ru/blogs/rss.php?version=2.0&amp;type=comments&amp;cid=3466</wfw:commentRss>
    

    <author>nospam@example.com (Sergey Moiseenko)</author>
    <content:encoded>
    &lt;p style=&quot;margin: 0px 25px; font-size: 9pt;&quot;&gt;Пересказ статьи &lt;a class=&quot;let&quot; href=&quot;https://www.snowflake.com/en/engineering-blog/postgres-jsonb-columns-and-toast/&quot;&gt;Paul Ramsey. Postgres JSONB Columns and TOAST: A Performance Guide&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
PostgreSQL имеет большой набор функций, ориентированных на пользователя, которые работают в самых разных случаях использования — со сложной абстракцией под капотом.&lt;br /&gt;
&lt;br /&gt;
Работа с API и массивами с типом данных jsonb становится все более популярной в настоящее время, и хранение фрагментов данных приложения с использованием jsonb становится общим шаблоном проектирования.&lt;br /&gt;
&lt;br /&gt;
Но зачем разбивать объект JSON на строки и столбцы, а затем восстанавливать его позже, чтобы отправить обратно клиенту?&lt;br /&gt;
&lt;br /&gt;
Ответом является эффективность. PostgreSQL наиболее эффективен при работе со строками и столбцами, и сокрытие структуры данных внутри JSON не позволяет движку работать так быстро, как он мог бы.&lt;br /&gt;
 &lt;a class=&quot;block_level&quot; href=&quot;https://sql-ex.ru/blogs/?/JSONB-TOAST-Postgres.html#extended&quot;&gt;Continue reading &quot;Столбцы JSONB и TOAST в Postgres: пособие по производительности&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 16 Jul 2026 09:03:00 +0300</pubDate>
    <guid isPermaLink="false">https://sql-ex.ru/blogs/?/3466.html</guid>
    
</item>

</channel>
</rss>
