テーブル「Table1」と、タイプ「Table1」の引数を受け入れるSQLプロシージャ「testProc」があります。このプロシージャが次のように呼び出されると、次のようになります。
select testProc(t.*) from Table1 t;
PostgreSQLはその引数を渡すために内部的にポインタを使用していますか?または、各行のメモリにコピーされますか?
ありがとう!
テーブル「Table1」と、タイプ「Table1」の引数を受け入れるSQLプロシージャ「testProc」があります。このプロシージャが次のように呼び出されると、次のようになります。
select testProc(t.*) from Table1 t;
PostgreSQLはその引数を渡すために内部的にポインタを使用していますか?または、各行のメモリにコピーされますか?
ありがとう!
ここには2つの異なるケースがあり、1つはコピーを含む必要があり、もう1つはポインターを含む必要があります。
あなたが言及している場合、コピーが作成されます。あなたは次のようにこれをテストすることができます:
create function test_test(inout test test) returns test as
$$
begin
$1.test := $1.test + 1;
return;
end;
$$ language plpgsql;
select (test_test(t)).test, (test_test(t)).test from test t;
ここで、test.testは整数です。番号は同じになります。
2つ目はトリガーにあり、NEWの変更は次のトリガーに渡されます。これらは参照によって渡される必要があります。