遍历Postgresql中的字符串数组

时间:2018-09-11 23:19:22

标签: postgresql

我对SQL非常陌生。还在学习。 我知道postgres可以存储数组数据,但是我将如何对该数据执行操作呢?我有一个由用户提供的n长度的字符串数组。我想在插入表之前检查每个字符串是否存在。

我已经尝试过,但是我不知道我是否做得正确。如果有帮助,我将使用Massive连接到数据库

查询是通过传入的字符串数组进行的。

DECLARE
  a text[] = $1
FOREACH i IN ARRAY a
LOOP 

DO 
$do$
BEGIN
  IF NOT EXISTS (SELECT tag_id FROM test_table WHERE tag_name = i) THEN
    INSERT INTO test_table (tag_name) 
    VALUES ($1);
END IF;
END
$do$

END LOOP;

我遇到了一个“错误:“文本”处或附近的语法错误”,但这可能是我遇到的最少问题。

1 个答案:

答案 0 :(得分:2)

您可以unnest而不是LOOP,然后测试数组中的值是否在另一个表中,就像这样:

INSERT INTO test (tag_name)
SELECT tag_name
FROM (SELECT unnest(a) AS tag_name) AS arr -- unnest the array and use like a table
WHERE NOT EXISTS (SELECT 1 FROM test_table WHERE tag_name = arr.tag_name) -- ensure tag_name is NOT in the test_table

这只会插入数组中尚未在test_table中列出的值。

文档:https://www.postgresql.org/docs/current/static/functions-array.html