【问题标题】:what is best way to extend postgresql to index json objects?将 postgresql 扩展到索引 json 对象的最佳方法是什么?
【发布时间】:2012-06-15 06:51:30
【问题描述】:

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 上的触发器。

【问题讨论】:

标签: sql json postgresql


【解决方案1】:

我不清楚你是如何从你的 json 导出“col1”的。大概这取决于你的json。

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

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

【讨论】:

    猜你喜欢
    • 2020-10-14
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2020-06-27
    • 2019-01-27
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多