Каков наилучший способ расширить postgresql для индексирования объектов JSON?

Postgres 9.2 поддерживает json колонны. что было бы лучшим способом продлить postgres автоматически индексировать на основе json Колум.

например,

create table obj(
   obj_id    bigserial    primary key,
   col1      varchar(20),
   col2      date,
   obj       json
);
create index obj_col1 on obj( col1 );
create index obj_col2 on obj( col2 );

когда запись вставлена ​​или обновлена, col1 а также col2 установлены из obj колонка.

по сути, правило заключается в том, что любой атрибут, кроме первичного ключа и самого столбца json, автоматически устанавливается из объекта json.

как следствие, переименование col1 также обновит json атрибут, переименование col1 там с новым именем.

может быть сделано с помощью catalogue а также execute заявления, но будет медленным, как грех.

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

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

является extension лучший способ пойти? как бы это выглядело?


заканчивается не может написать extension сделать это, так как pg не поддерживает триггеры на CREATE TABLE или ALTER TABLE.

единственным предложением для клуджа будет ведение журнала для DDL, отслеживание журнала, а затем запуск процедуры. хотя это и можно сделать, нам действительно нужны триггеры CREATE и ALTER TABLE.

1 ответ

Решение

Мне не ясно, как вы выводите "col1" из вашего JSON. Предположительно, это зависит от вашего JSON.

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

О - вы тоже можете найти http://pgtap.org/ полезным - вам захочется все это проверить.

Другие вопросы по тегам