0

テーブル「Table1」と、タイプ「Table1」の引数を受け入れるSQLプロシージャ「testProc」があります。このプロシージャが次のように呼び出されると、次のようになります。

select testProc(t.*) from Table1 t; 

PostgreSQLはその引数を渡すために内部的にポインタを使用していますか?または、各行のメモリにコピーされますか?

ありがとう!

4

1 に答える 1

1

ここには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の変更は次のトリガーに渡されます。これらは参照によって渡される必要があります。

于 2013-03-14T04:07:47.660 に答える