<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dw="https://www.dreamwidth.org">
  <id>tag:dreamwidth.org,2011-04-09:776862</id>
  <title>Dmitry Belyavskiy</title>
  <subtitle>Dmitry Belyavskiy</subtitle>
  <author>
    <name>Dmitry Belyavskiy</name>
  </author>
  <link rel="alternate" type="text/html" href="https://beldmit.dreamwidth.org/"/>
  <link rel="self" type="text/xml" href="https://beldmit.dreamwidth.org/data/atom"/>
  <updated>2019-01-29T17:58:59Z</updated>
  <dw:journal username="beldmit" type="personal"/>
  <entry>
    <id>tag:dreamwidth.org,2011-04-09:776862:871216</id>
    <link rel="alternate" type="text/html" href="https://beldmit.dreamwidth.org/871216.html"/>
    <link rel="self" type="text/xml" href="https://beldmit.dreamwidth.org/data/atom/?itemid=871216"/>
    <title>Open, блин, Source</title>
    <published>2019-01-29T17:31:12Z</published>
    <updated>2019-01-29T17:58:59Z</updated>
    <category term="postgresql"/>
    <dw:security>public</dw:security>
    <dw:reply-count>8</dw:reply-count>
    <content type="html">Блин. Я ещё могу понять, зачем Postgres использует BSD-шный indent. Но какого хрена этот indent пытается собраться с -lselinux -lxslt -lxml2 -lpam -lgssapi_krb5 -lz -ledit?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; сим полукреслом мастер Гамбс начинает попытку засабмитить патч в PostgreSQL. Точнее, в контриб ltree.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=beldmit&amp;ditemid=871216" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2011-04-09:776862:837883</id>
    <link rel="alternate" type="text/html" href="https://beldmit.dreamwidth.org/837883.html"/>
    <link rel="self" type="text/xml" href="https://beldmit.dreamwidth.org/data/atom/?itemid=837883"/>
    <title>Unicode, сортировки, а я маленький такой</title>
    <published>2017-12-04T17:17:20Z</published>
    <updated>2017-12-04T17:17:20Z</updated>
    <category term="postgresql"/>
    <category term="компьютерное"/>
    <category term="работа"/>
    <category term="программирование"/>
    <dw:security>public</dw:security>
    <dw:reply-count>21</dw:reply-count>
    <content type="html">Коллега сегодня обнаружил, что при сортировке в уникодной локали PostgreSQL выдаёт записи в таком порядке:&lt;br /&gt;&lt;br /&gt;_a&lt;br /&gt;a&lt;br /&gt;_c&lt;br /&gt;d&lt;br /&gt;&lt;br /&gt;что несколько контринтуитивно. &lt;br /&gt;&lt;br /&gt;Вскрытие показало, что &lt;a href="http://unicode.org/reports/tr10/#Variable_Weighting"&gt;алгоритм сравнения в Unicode&lt;/a&gt; довольно хитровывернутый в этом месте. При сортировке в локали базы в итоге символы подчёркивания игнорируются. &lt;br /&gt;&lt;br /&gt;Вылечилось это привешиванием COLLATE "C" на искомую колонку, который даёт сравнение, грубо говоря, побайтовое. Но вообще поведение документированное, но неочевидное.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=beldmit&amp;ditemid=837883" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2011-04-09:776862:817554</id>
    <link rel="alternate" type="text/html" href="https://beldmit.dreamwidth.org/817554.html"/>
    <link rel="self" type="text/xml" href="https://beldmit.dreamwidth.org/data/atom/?itemid=817554"/>
    <title>beldmit @ 2017-05-03T16:40:00</title>
    <published>2017-05-03T13:42:20Z</published>
    <updated>2017-05-03T13:42:20Z</updated>
    <category term="программирование"/>
    <category term="postgresql"/>
    <category term="ссылки"/>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">&lt;a href="http://okbob.blogspot.ru/2017/04/how-to-find-unindexed-foreign-keys.html"&gt;Поиск забытых индексов при FOREIGN KEY для PostgreSQL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;У себя нашёл не очень много и не очень актуальных, но вообще пригодится, прикопаю.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=beldmit&amp;ditemid=817554" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2011-04-09:776862:807684</id>
    <link rel="alternate" type="text/html" href="https://beldmit.dreamwidth.org/807684.html"/>
    <link rel="self" type="text/xml" href="https://beldmit.dreamwidth.org/data/atom/?itemid=807684"/>
    <title>beldmit @ 2017-01-30T19:07:00</title>
    <published>2017-01-30T16:12:47Z</published>
    <updated>2017-01-30T16:12:47Z</updated>
    <category term="работа"/>
    <category term="postgresql"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">В очередной раз заглянул в лог запросов базы, обнаружил толпу однотипных мелких запросов. В итоге переписал сегодня обработчик очереди с poll- на push-модель, использовав LISTEN/NOTIFY. &lt;br /&gt;Примеры в сети нашлись толковые, и в результате единственное исправление с тем, что я предполагал — то, что в триггере на добавление записи надо сказать не SELECT pg_notify(), а PERFORM pg_notify().&lt;br /&gt;&lt;br /&gt;Вообще январь оказался куда продуктивнее декабря, когда очень не хотелось ничего начинать. За три недели это уже третья революция в отдельно взятых кусках кода.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=beldmit&amp;ditemid=807684" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2011-04-09:776862:489381</id>
    <link rel="alternate" type="text/html" href="https://beldmit.dreamwidth.org/489381.html"/>
    <link rel="self" type="text/xml" href="https://beldmit.dreamwidth.org/data/atom/?itemid=489381"/>
    <title>PGConf EU</title>
    <published>2016-11-03T17:24:56Z</published>
    <updated>2016-11-03T17:25:16Z</updated>
    <category term="security"/>
    <category term="postgresql"/>
    <category term="ссылки"/>
    <dw:security>public</dw:security>
    <dw:reply-count>7</dw:reply-count>
    <content type="html">&lt;a href="http://modern-sql.com/slides"&gt;A lot has changed since SQL-92&lt;/a&gt; - очень толковая презентация. &lt;span style='white-space: nowrap;'&gt;&lt;a href='http://hettie-lz.livejournal.com/profile'&gt;&lt;img src='https://www.dreamwidth.org/img/external/lj-userinfo.gif' alt='[livejournal.com profile] ' style='vertical-align: text-bottom; border: 0; padding-right: 1px;' width='17' height='17'/&gt;&lt;/a&gt;&lt;a href='http://hettie-lz.livejournal.com/'&gt;&lt;b&gt;hettie_lz&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;, последняя представленная там возможность как-то с Вашим докладом в Москве стыкуется?&lt;br /&gt;&lt;br /&gt;Ещё была презентация про обеспечение безопасности при работе с базой. Ничего сверхъестественного, но неплохой checklist.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cybertec.at/2016/11/announcing-availability-of-postgresql-instance-level-encryption/"&gt;Announcing availability of PostgreSQL instance level encryption&lt;/a&gt; - очень похоже на правильную реализацию криптографии на уровне СУБД. Завтра попробую пообщаться с автором.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=beldmit&amp;ditemid=489381" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2011-04-09:776862:471196</id>
    <link rel="alternate" type="text/html" href="https://beldmit.dreamwidth.org/471196.html"/>
    <link rel="self" type="text/xml" href="https://beldmit.dreamwidth.org/data/atom/?itemid=471196"/>
    <title>На память - оптимизация базы</title>
    <published>2016-04-29T17:50:05Z</published>
    <updated>2016-04-29T17:50:05Z</updated>
    <category term="программирование"/>
    <category term="ссылки"/>
    <category term="postgresql"/>
    <dw:security>public</dw:security>
    <dw:reply-count>11</dw:reply-count>
    <content type="html">Запрос для поиска пропущенных в базе индексов.&lt;br /&gt;&lt;br /&gt;SELECT relname, idx_scan, seq_scan, seq_tup_read&lt;br /&gt;FROM pg_stat_user_tables&lt;br /&gt;ORDER BY seq_tup_read DESC;&lt;br /&gt;&lt;br /&gt;И вообще интересная &lt;a href="http://www.postgresql.biz/download/2013_dublin_bottlenecks.pdf"&gt;презентация&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=beldmit&amp;ditemid=471196" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2011-04-09:776862:453120</id>
    <link rel="alternate" type="text/html" href="https://beldmit.dreamwidth.org/453120.html"/>
    <link rel="self" type="text/xml" href="https://beldmit.dreamwidth.org/data/atom/?itemid=453120"/>
    <title>Schemaless-базы данных</title>
    <published>2015-11-11T09:12:54Z</published>
    <updated>2015-11-11T09:12:54Z</updated>
    <category term="программирование"/>
    <category term="postgresql"/>
    <dw:security>public</dw:security>
    <dw:reply-count>31</dw:reply-count>
    <content type="html">Я давно хотел написать этот пост, но до разговора с Фёдором Сигаевым на PGConf.eu стеснялся.&lt;br /&gt;&lt;br /&gt;Одно из позиционирований NoSQL-ных баз данных — отсутствие схемы. Я всегда этот момент не понимал. Собственно, у меня на рабочем столе (физическом) полное отсутствие схемы, и помойкой это не является только потому, что я её так не называю. В смысле, мало запихнуть данные в куда-нибудь, с ними надо ещё работать: искать по атрибутам или по их значениям, а значит где-то эти значения должны регламентироваться. Не будут регламентироваться — рано или поздно получите атрибуты topic, Topic и TOPICS с одной семантикой. &lt;br /&gt;&lt;br /&gt;В SQL-базе эту регламентацию достигают проверкой на уровне имён колонок. В NoSQL это придётся делать в приложении, потому что альтернатива — в мозгах программистов — слишком ненадёжна. И то и другое приводит к багам разной степени уловимости, даже при использовании hstore мы вдвоём с коллегой по этому грабельному полю потоптались. &lt;br /&gt;&lt;br /&gt;То есть по большому счёту летать вся эта структурированность будет в паре случаев.&lt;br /&gt;&lt;br /&gt;1. Когда база используется как хранилище без обработки. Максимум - проверить, что то, что передали в качестве XML, таковым является.&lt;br /&gt;2. Когда “структурированные” данные обрабатываются и пишутся локально (например, параметры для разных типов заданий в очереди). И то в этом случае приходится работать с такой структурой как минимум в 2 местах — при чтении и при записи.&lt;br /&gt;&lt;br /&gt;Во всех остальных случаях получаются размазанные по приложению метаданные, которые удобней держать в одной точке — в базе. Удобнее, например, потому как grep-ать не надо, а можно описание таблицы посмотреть. Нельзя построить внешние ключи (ну, ORM это частично компенсирует) и навести типизацию тоже можно довольно ограниченно.&lt;br /&gt;&lt;br /&gt;Лично я до сих пор использую из таких "бессхемных" типов в PostgreSQL ровно 2 — hstore и XML. XML при этом в моей задаче можно было бы заменить массивом hstore или отдельной таблицей, но из соображений отслеживания изменений оказалось проще внедрить XML. Можно было бы с таким же успехов json воткнуть, впрочем.&lt;br /&gt;&lt;br /&gt;Конечно, недооценивать экономию усилий при добавлении новой колонки не надо. Это часто бывает самостоятельным геморроем, особенно если требуется zero downtime. Но пока что, по ощущениям, schemaless того не стоит.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=beldmit&amp;ditemid=453120" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
</feed>
