Продолжая тему использования динамического SQL, я хочу рассказать об одном полезном инструменте, реализованном мной в рамках одного из текущих проектов. Речь пойдет о дубликатах в справочниках. Под дубликатами, в этой статье, я понимаю записи, внесенные в справочники повторно, например в результате орфографической ошибки при вводе наименования.
Читать полностью »
Рубрика «postgresql» - 71
Боремся с дубликатами
2013-05-16 в 10:55, admin, рубрики: postgresql, дубликаты, метки: postgresql, дубликатыРезервное копирование и восстановление в PostgreSQL
2013-05-13 в 12:43, admin, рубрики: postgres, postgresql, метки: postgres, postgresqlРезервное копирование и восстановление в PostgreSQL
Предположим что у нас есть postgresql в режиме потоковой репликации. master-сервер и hot-standby готовый заменить погибшего товарища. При плохом развитии событий, нам остается только создать trigger-файл и переключить наши приложения на работу с новым мастером. Однако, возможны ситуации когда вполне законные изменения были сделаны криво написанной миграцией и попали как на мастер, так и на подчиненный сервер. Например, были удалены/изменены данные в части таблиц или же таблицы были вовсе удалены. С точки зрения базы данных все нормально, а с точки зрения бизнеса — катастрофа. В таком случае провозглашение горячего hot-standby в мастера, процедура явно бесполезная…
Для предостережения такой ситуации есть, как минимум, два варианта…
Читать полностью »
Секционирование и «живые снимки» данных в PostgreSQL
2013-04-30 в 8:53, admin, рубрики: olap, Partitioning, postgresql, метки: olap, Partitioning, postgresql Хотя тема секционирования уже поднималась ранее, я хочу к ней вернуться, чтобы рассказать о своем опыте решения этой задачи, возникшей в связи с необходимостью аналитической обработкой больших объемов данных. Помимо секционирования, я рассмотрю предельно упрощенную реализацию «снимков» агрегированных запросов, автоматически обновляемых при изменении исходных данных..
Читать полностью »
Простенький пользовательский агрегат
2013-04-18 в 10:03, admin, рубрики: administration, aggregate, database, postgresql, tutorial, Администрирование баз данныхПользовательские агрегаты (custom aggregates) являются одной из тех уникальных особенностей PostgreSQL, понять которую кажется не под силу никому. Однако как только создать хотя бы один по-настоящему работающий пример, тучи разверзнутся, и вы будете удивляться, как же раньше жили без такого матёрого функционала. Так давайте создадим такой простенький агрегат. Он будет возвращать состояние, то есть наиболее часто встречающееся значение, для логического (булевого) поля.
Кто и зачем может захотеть странного? Ну, представьте, что вы денно и нощно мониторите несколько ваших веб-серверов, и хотите иметь почасовую картину аптайма (uptime). Допустим каждые 30 секунд состояние сервера заносится в таблицу: TRUE — сервер работает, FALSE — сервер лежит. Тогда если большую часть времени сервер работал мы хотим вернуть TRUE, а ежели по большей части сервер стоял, то соответственно FALSE. А если и сама система мониторинга лежит и, следовательно, нет никаких данных, будем возвращать NULL.
Читать полностью »
Вышло обновление PostgreSQL, исправляющее серьёзную уязвимость
2013-04-04 в 17:03, admin, рубрики: postgresql, РЕШЕТО, метки: postgresql, РЕШЕТОВышло обновление безопасности для всех текущих версий PostgreSQL, включая 9.2.4, 9.1.9, 9.0.13 и 8.4.17. Это обновление исправляет особо опасную уязвимость в версиях 9.0 и новее. Всем пользователям крайне рекомендуется обновиться.
Главная проблема безопасности, исправленная в этой версии, CVE-2013-1899, позволяет злоумышленнику повредить или уничтожить некоторые файлы в директории сервера, отправив запрос на подключение к базе данных с именем, начинающимся на "-". Любой, кто имеет доступ к порту PostgreSQL может послать такой запрос.
Читать полностью »
Миграция данных с MySQL на PostgreSQL
2013-04-04 в 12:28, admin, рубрики: c++, mysql, postgresql, метки: c++, mysql, postgresqlПо мере работы с базами данных, ознакомления с их плюсами и минусами, возникает момент, когда принимается решение миграции с одной СУБД в другую. В данном случае возникла задача переноса сервисов с MySQL на PostgreSQL. Вот небольшой перечень вкусностей, которые ждут от перехода на PostgreSQL, версии 9.2 (с более подробным списком возможностей можно ознакомится тут):
- наследование таблиц (есть ограничения, которые обещают в будущем исправить)
- диапазоны: int4range, numrange, daterange
- поддержка из коробки несколько языков для хранимых функций (PL/pgSQL, PL/Tcl, PL/Perl, PL/Python и голый C)
- оператор WITH, позволяющий делать рекурсивные запросы
- (планируется) материализованные представления (частично они доступны и сейчас — как IUD правила к представлению)
- (планируется) триггера на DDL операции
Как правило, существующие решения опираются на работу с уже готовым SQL дампом, который конвертируется в соответствии с синтаксисом целевой БД. Но в некоторых случаях (активно использующееся веб-приложение с большим объемом информации) такой вариант несет определенные временные затраты на создание SQL дампа из СУБД, его конвертации и загрузку получившегося дампа снова в СУБД. Поэтому оптимальней будет online-вариант (прямиком из СУБД в СУБД) конвертера, что может существенно уменьшить простой сервисов.
Читать полностью »
Django ORM, gevent и грабли в зелени
2013-03-29 в 12:28, admin, рубрики: django, gevent, postgresql, python, Песочница, метки: Django, gevent, postgresql, pythonОчень многие выбирают Django за его простоту. Код на Django прост и лаконичен, мы меньше думаем о костылях и больше о бизнес-логике.
Gevent тоже выбирают из-за того, что он простой, очень шустрый и не несёт за собой callback hell.
В голове возникает великолепная идея совместить две простые и удобные вещи вместе. Мы патчим Django и радуемся простоте, лаконичности и производительности, делаем множество запросов на другие сайты, создаём подпроцессы, в общем используем наш новый асинхронный Django по максимуму.
Но совместив их, мы незаметно для себя поставили несколько граблей на нашем пути.
Читать полностью »
Простая настройка репликации в PostgreSQL
2013-03-25 в 15:57, admin, рубрики: postgresql, Администрирование БД, базы данных, Песочница, репликация, хранение данных, метки: postgresql, Администрирование БД, базы данных, репликация, хранение данных
Возникла необходимость быстро и как можно проще организовать репликацию данных с сервера БД на резервный сервер. Простой и понятный способ на просторах Сети так и не нашелся, по этому пришлось по частям собрать информацию, которая и стала этой статьёй.
Решаемая задача. Исходные данные
Итак, имеем сервер БД, с которым работают клиенты, и резервный сервер, на который надо настроить репликацию с основной базы данных.
В моём случае используется PostgreSQL 9.2.1, который установлен на обоих серверах и поддерживает потоковую репликацию. Предположим что база данных на основном сервере развернута и работает, на резервном только установлен, но не настроен PostgreSQL. Для примера возьмем IP-адрес 192.168.1.1 за адрес основного сервера, IP-адрес 192.168.1.2 — за адрес резервного.
Читать полностью »
Еще пара слов о потоковой репликации в postgres…
2013-03-20 в 15:03, admin, рубрики: *unix, postgresql, postgresql 9.1, Администрирование баз данных, Администрирование БД, Серверное администрирование, метки: postgresql 9.1, unix, Администрирование БД
Асинхронная потоковая репликация — полезная штука. Для нее нынче есть много различных утилит, можно выстроить большую, мощную и верную систему.
Но предположим, что у Вас небольшая задача, пара серверов и встроенная postgres-репликация. О ее настройке материалов достаточно, и о действиях в случае отказа мастера тоже можно найти.
А вот с вопросом восстановления мастера оказалась беда, поэтому делюсь с Вами собранным по кусочкам с просторов интернета руководством к действию, опробованным и протестеным мною на связках серверов Debian GNU/Linux и FreeBSD 8.2 с PostgreSQL 9.1
Qt сборка драйвера для работы с PostgreSQL (Windows)
2013-03-18 в 13:54, admin, рубрики: postgresql, qt, Qt Software, windows, метки: postgresql, Qt, windows Небольшое лирическое отступление:
Написать эту заметку меня сподвигло наличие в интернете огромного количества инструкций которые просто цитируют документацию, а реально не работают. Т.к. я работаю с Qt время от времени, то не знаю как обстоят дела с данной проблемой в Qt5.
Проблема
В установку по умолчанию (по крайней мере для версии 4.8.4) драйвер для работы с Postgres не входит.
Официальная документация предлагает собирать его очень простым способом http://qt-project.org/doc/qt-4.8/sql-driver.html#qpsql, но если вы скачивали уже собранное Qt, то будете изрядно озадачены тем, что сборка проходит без ошибок, но ничего не работает.
Читать полностью »