什么是将postgresql扩展为索引json对象的最佳方法?

时间:2012-06-15 06:51:31

标签: sql json postgresql

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 );

在插入或更新记录时,col1col2是从obj列设置的。

基本上规则是除了主键和json列本身之外的任何属性都是从json对象自动设置的。

作为相关内容,重命名col1也会更新json属性,并将col1重命名为新名称。

可以使用catalogueexecute语句完成,但会因为罪而缓慢。

可以通过为每个表创建触发器来完成,但这既乏味又容易出错。

无法通过继承来完成,因为无法继承触发器。

extension最好的方式吗?它甚至会是什么样子?


最终无法写extension来执行此操作,因为pg不支持CREATE TABLE或ALTER TABLE上的触发器。

对于kludge的唯一建议是登录DDL,监视日志,然后运行一个过程。虽然可以这样做,但我们真正需要的是CREATE和ALTER TABLE上的触发器。

1 个答案:

答案 0 :(得分:1)

我不清楚你是如何从你的json派生“col1”的。据推测,这取决于你的json。

无论如何 - 最好的方法是编写一个为您编写触发器的脚本,以及另一个为您编写列重命名操作的脚本。你提供任何必要的参数,并吐出plpgsql代码。

哦 - 你可能会发现http://pgtap.org/也很有用 - 你会想要测试这一切。