Postgresql

如何更新 Postgresql 表中的數組欄位?

  • May 20, 2015

假設我有一個定義如下的表:

CREATE TABLE my_tbl (
   id  bigint,
   a1  bigint[],
   a2  bigint[]
);

我想創建一個儲存過程來將值附加到a1a2。這是正確的方法還是有更簡單的方法?

CREATE OR REPLACE FUNCTION append(
       iid  bigint,
       next_a1  bigint,
       next_a2  bigint)
DECLARE
   r       "my_tbl";
   tmp_a1  bigint[]; 
   tmp_a2  bigint[]; 
BEGIN
   FOR r IN SELECT * FROM "my_tbl"
             WHERE r."id" = iid
               FOR UPDATE
       LOOP
           tmp_a1 := r.a1 || next_a1;
           tmp_a2 := r.a2 || next_a2;
           UPDATE my_tbl SET ( "a1", "a2" ) = ( tmp_a1, tmp_a2 )
            WHERE "id" = iid;
       END LOOP;
END; $$
LANGUAGE plpgsql;

我在 Postgresql 9.2 上。

你可以簡單地做

UPDATE my_tbl 
  SET (a1, a2) = (a1 || 123465, a2 || 132456789)
WHERE id = 321;

要獲得一個函式,您只需將整數常量替換為參數。您可以安全地使用查詢語言(又名 SQL)函式來執行此操作,根本不需要 pl/pgsql。

引用自:https://dba.stackexchange.com/questions/102060