Postgresql

可變函式和復合類型

  • October 6, 2021

我有這樣的功能:

update_stuff_variadic(
   VARIADIC _stuff_array stuff[]
)

我知道這種語法需要 _stuff_array 來匹配東西的列結構

$$ $$桌子。 是否可以在數組中設置所需元素的類型,而不是隱式匹配 stuff 表的每一列?

偽:

update_stuff_variadic(
   VARIADIC _stuff_array array['comment'::BIGINT, 'created_by'::TEXT]
)

這樣,傳遞給函式的數組就不必容納諸如序列 ID 欄位之類的列,或諸如時間戳之類的自動填充欄位。

您需要一個已註冊的複合類型(行類型)。

每當您創建表或視圖時,都會隱式註冊複合類型。

您使用 . 顯式註冊複合類型CREATE TYPE

所以你可以:

CREATE TYPE my_partial_stuff AS (comment bigint, created_by text);

CREATE OR REPLACE FUNCTION update_stuff_variadic(
   VARIADIC _stuff_array my_partial_stuff[]
) ...

然後呼叫函式:

SELECT update_stuff_variadic ('(8,foo)', '(9,bar)');

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