Unicode, сортировки, а я маленький такой
Dec. 4th, 2017 08:07 pmКоллега сегодня обнаружил, что при сортировке в уникодной локали PostgreSQL выдаёт записи в таком порядке:
_a
a
_c
d
что несколько контринтуитивно.
Вскрытие показало, что алгоритм сравнения в Unicode довольно хитровывернутый в этом месте. При сортировке в локали базы в итоге символы подчёркивания игнорируются.
Вылечилось это привешиванием COLLATE "C" на искомую колонку, который даёт сравнение, грубо говоря, побайтовое. Но вообще поведение документированное, но неочевидное.
_a
a
_c
d
что несколько контринтуитивно.
Вскрытие показало, что алгоритм сравнения в Unicode довольно хитровывернутый в этом месте. При сортировке в локали базы в итоге символы подчёркивания игнорируются.
Вылечилось это привешиванием COLLATE "C" на искомую колонку, который даёт сравнение, грубо говоря, побайтовое. Но вообще поведение документированное, но неочевидное.
(no subject)
May. 3rd, 2017 04:40 pmПоиск забытых индексов при FOREIGN KEY для PostgreSQL.
У себя нашёл не очень много и не очень актуальных, но вообще пригодится, прикопаю.
У себя нашёл не очень много и не очень актуальных, но вообще пригодится, прикопаю.
(no subject)
Jan. 30th, 2017 07:07 pmВ очередной раз заглянул в лог запросов базы, обнаружил толпу однотипных мелких запросов. В итоге переписал сегодня обработчик очереди с poll- на push-модель, использовав LISTEN/NOTIFY.
Примеры в сети нашлись толковые, и в результате единственное исправление с тем, что я предполагал — то, что в триггере на добавление записи надо сказать не SELECT pg_notify(), а PERFORM pg_notify().
Вообще январь оказался куда продуктивнее декабря, когда очень не хотелось ничего начинать. За три недели это уже третья революция в отдельно взятых кусках кода.
Примеры в сети нашлись толковые, и в результате единственное исправление с тем, что я предполагал — то, что в триггере на добавление записи надо сказать не SELECT pg_notify(), а PERFORM pg_notify().
Вообще январь оказался куда продуктивнее декабря, когда очень не хотелось ничего начинать. За три недели это уже третья революция в отдельно взятых кусках кода.
A lot has changed since SQL-92 - очень толковая презентация.
hettie_lz, последняя представленная там возможность как-то с Вашим докладом в Москве стыкуется?
Ещё была презентация про обеспечение безопасности при работе с базой. Ничего сверхъестественного, но неплохой checklist.
Announcing availability of PostgreSQL instance level encryption - очень похоже на правильную реализацию криптографии на уровне СУБД. Завтра попробую пообщаться с автором.
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Ещё была презентация про обеспечение безопасности при работе с базой. Ничего сверхъестественного, но неплохой checklist.
Announcing availability of PostgreSQL instance level encryption - очень похоже на правильную реализацию криптографии на уровне СУБД. Завтра попробую пообщаться с автором.
На память - оптимизация базы
Apr. 29th, 2016 08:48 pmЗапрос для поиска пропущенных в базе индексов.
SELECT relname, idx_scan, seq_scan, seq_tup_read
FROM pg_stat_user_tables
ORDER BY seq_tup_read DESC;
И вообще интересная презентация.
SELECT relname, idx_scan, seq_scan, seq_tup_read
FROM pg_stat_user_tables
ORDER BY seq_tup_read DESC;
И вообще интересная презентация.
Schemaless-базы данных
Nov. 11th, 2015 12:08 pmЯ давно хотел написать этот пост, но до разговора с Фёдором Сигаевым на PGConf.eu стеснялся.
Одно из позиционирований NoSQL-ных баз данных — отсутствие схемы. Я всегда этот момент не понимал. Собственно, у меня на рабочем столе (физическом) полное отсутствие схемы, и помойкой это не является только потому, что я её так не называю. В смысле, мало запихнуть данные в куда-нибудь, с ними надо ещё работать: искать по атрибутам или по их значениям, а значит где-то эти значения должны регламентироваться. Не будут регламентироваться — рано или поздно получите атрибуты topic, Topic и TOPICS с одной семантикой.
В SQL-базе эту регламентацию достигают проверкой на уровне имён колонок. В NoSQL это придётся делать в приложении, потому что альтернатива — в мозгах программистов — слишком ненадёжна. И то и другое приводит к багам разной степени уловимости, даже при использовании hstore мы вдвоём с коллегой по этому грабельному полю потоптались.
То есть по большому счёту летать вся эта структурированность будет в паре случаев.
1. Когда база используется как хранилище без обработки. Максимум - проверить, что то, что передали в качестве XML, таковым является.
2. Когда “структурированные” данные обрабатываются и пишутся локально (например, параметры для разных типов заданий в очереди). И то в этом случае приходится работать с такой структурой как минимум в 2 местах — при чтении и при записи.
Во всех остальных случаях получаются размазанные по приложению метаданные, которые удобней держать в одной точке — в базе. Удобнее, например, потому как grep-ать не надо, а можно описание таблицы посмотреть. Нельзя построить внешние ключи (ну, ORM это частично компенсирует) и навести типизацию тоже можно довольно ограниченно.
Лично я до сих пор использую из таких "бессхемных" типов в PostgreSQL ровно 2 — hstore и XML. XML при этом в моей задаче можно было бы заменить массивом hstore или отдельной таблицей, но из соображений отслеживания изменений оказалось проще внедрить XML. Можно было бы с таким же успехов json воткнуть, впрочем.
Конечно, недооценивать экономию усилий при добавлении новой колонки не надо. Это часто бывает самостоятельным геморроем, особенно если требуется zero downtime. Но пока что, по ощущениям, schemaless того не стоит.
Одно из позиционирований NoSQL-ных баз данных — отсутствие схемы. Я всегда этот момент не понимал. Собственно, у меня на рабочем столе (физическом) полное отсутствие схемы, и помойкой это не является только потому, что я её так не называю. В смысле, мало запихнуть данные в куда-нибудь, с ними надо ещё работать: искать по атрибутам или по их значениям, а значит где-то эти значения должны регламентироваться. Не будут регламентироваться — рано или поздно получите атрибуты topic, Topic и TOPICS с одной семантикой.
В SQL-базе эту регламентацию достигают проверкой на уровне имён колонок. В NoSQL это придётся делать в приложении, потому что альтернатива — в мозгах программистов — слишком ненадёжна. И то и другое приводит к багам разной степени уловимости, даже при использовании hstore мы вдвоём с коллегой по этому грабельному полю потоптались.
То есть по большому счёту летать вся эта структурированность будет в паре случаев.
1. Когда база используется как хранилище без обработки. Максимум - проверить, что то, что передали в качестве XML, таковым является.
2. Когда “структурированные” данные обрабатываются и пишутся локально (например, параметры для разных типов заданий в очереди). И то в этом случае приходится работать с такой структурой как минимум в 2 местах — при чтении и при записи.
Во всех остальных случаях получаются размазанные по приложению метаданные, которые удобней держать в одной точке — в базе. Удобнее, например, потому как grep-ать не надо, а можно описание таблицы посмотреть. Нельзя построить внешние ключи (ну, ORM это частично компенсирует) и навести типизацию тоже можно довольно ограниченно.
Лично я до сих пор использую из таких "бессхемных" типов в PostgreSQL ровно 2 — hstore и XML. XML при этом в моей задаче можно было бы заменить массивом hstore или отдельной таблицей, но из соображений отслеживания изменений оказалось проще внедрить XML. Можно было бы с таким же успехов json воткнуть, впрочем.
Конечно, недооценивать экономию усилий при добавлении новой колонки не надо. Это часто бывает самостоятельным геморроем, особенно если требуется zero downtime. Но пока что, по ощущениям, schemaless того не стоит.
За чистоту ленинских идей
Mar. 9th, 2011 10:29 pmНа работе завелась машинка с Debian-ом. Стал готовить на ней инсталляцию, которой на днях в бой вставать - и удивился, почему в psql не работает ввод русских букв.
( Дальше - только пользователям PostgreSQL. Раньше, впрочем, тоже особо больше некому. )
( Дальше - только пользователям PostgreSQL. Раньше, впрочем, тоже особо больше некому. )
За чистоту ленинских идей
Mar. 9th, 2011 10:29 pmНа работе завелась машинка с Debian-ом. Стал готовить на ней инсталляцию, которой на днях в бой вставать - и удивился, почему в psql не работает ввод русских букв.
( Дальше - только пользователям PostgreSQL. Раньше, впрочем, тоже особо больше некому. )
( Дальше - только пользователям PostgreSQL. Раньше, впрочем, тоже особо больше некому. )
Рабочие будни
Feb. 6th, 2007 11:04 pm( Программизм )
Но это все фигня. Через неделю надеюсь похвастаться результатом, имеющим публичное значение.
Но это все фигня. Через неделю надеюсь похвастаться результатом, имеющим публичное значение.
Рабочие будни
Feb. 6th, 2007 11:04 pm( Программизм )
Но это все фигня. Через неделю надеюсь похвастаться результатом, имеющим публичное значение.
Но это все фигня. Через неделю надеюсь похвастаться результатом, имеющим публичное значение.