PostgreSQL在2个记录集中循环jsonb行并找到更改

时间:2017-04-16 10:23:50

标签: postgresql postgresql-9.4 jsonb

我是PostgreSQL世界的新手,并且不了解它的产品。我有一个要求,我必须在解析PostgreSQL中的JSONB列时找到2个记录集中的值的更改。这就是我在说什么。

我想创建一个接受4个参数的PostgreSQL FUNCTION {dynamicstring1字符变化,dynamicstring2字符变化,columnsToCheck字符变化,uniqueColumns字符变化}

CREATE OR REPLACE FUNCTION ChangeTrack(dynamicstring1 character varying,
                                            dynamicstring2 character varying,
                                            UniqueCols character varying,
                                            columnsToCheck character varying)
RETURNS VOID AS $$

$$
LANGUAGE SQL;

在函数内部,我将通过EXECUTE函数执行这两个动态字符串,它应该给我如下的结果集:

来自dynamicstring1的数据集

1,  25193,{"ID":1,"Age":12.1,"Name":"P1","Address":"Add11"}
2,  25193,{"ID":2,"Age":13.1,"Name":"P2","Address":"Add21"}
3,  25193,{"ID":3,"Age":14.1,"Name":"P3","Address":"Add31"}
4,  25193,{"ID":4,"Age":15.1,"Name":"P4","Address":"Add41"}
5,  25193,{"ID":5,"Age":16.1,"Name":"P5","Address":"Add51"}
6,  25193,{"ID":6,"Age":17.1,"Name":"P6","Address":"Add61"}

来自dynamicstring2的数据集

7,  25194,{"ID":1,"Age":12,"Name":"P1","Address":"Add1"} 
8,  25194,{"ID":2,"Age":13,"Name":"P2","Address":"Add2"}
9,  25194,{"ID":3,"Age":14,"Name":"P3","Address":"Add3"}
10, 25194,{"ID":4,"Age":15,"Name":"P4","Address":"Add4"}
11, 25194,{"ID":5,"Age":16,"Name":"P5","Address":"Add5"}
12, 25194,{"ID":6,"Age":17,"Name":"P6","Address":"Add6"}

包含此数据的表格是

Result(UId PK bigint, ResultId bigint, Results jsonB).

期望很简单,我应该循环通过数据集来自dynamicstring1 中的记录,一次取一行,在数据集中找到同一行来自dynamicstring2 并在中提到的列之间进行字符串比较 两行之间的 columnsToCheck 数组。

columnsToCheck 是一个字符串数组,其中包含要监视的列。它的值为[“Age”,“Address”]。因此,需要跟踪这两个变化。

数据集来自dynamicstring2 中查找行的方法应该是:当来自数据集来自dynamicstring1 的行被循环时,我们从列中获取值在 uniqueCols 中提到并查找相同的值以在数据集来自dynamicstring2 中查找相应的行。因此 uniqueCols 将是另一个字符串数组值为[“Id”,“Name”]。这将确保我们始终将数据集中来自dynamicstring1 的相同Id和Name的记录与来自dynamicstring2 数据集的记录进行比较/强>

我可能听起来很复杂,但我更像是一个以前没有处理过JSON解析的SQL人员。在这里寻求一些好的帮助可以带我前进。

0 个答案:

没有答案