Postgresql
如何更新 Postgresql 表中的數組欄位?
假設我有一個定義如下的表:
CREATE TABLE my_tbl ( id bigint, a1 bigint[], a2 bigint[] );
我想創建一個儲存過程來將值附加到
a1
和a2
。這是正確的方法還是有更簡單的方法?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。