我对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;
我遇到了一个“错误:“文本”处或附近的语法错误”,但这可能是我遇到的最少问题。
答案 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