代码之家  ›  专栏  ›  技术社区  ›  anthony

在postgresql中遍历字符串数组

  •  1
  • anthony  · 技术社区  · 6 年前

    我试过了,但我不知道我做得是否正确。我连接到数据库使用大规模的,如果有任何帮助

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

    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 回复  |  直到 6 年前
        1
  •  2
  •   Nick    6 年前

    而不是一个循环,你可以 unnest 然后测试数组以查看值是否在另一个表中,如下所示:

    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