untuk memulai dengan, name
adalah nama yang buruk untuk variabel dan atribut. Ketika Anda memiliki keduanya, kode tidak akan terlihat bagus. dengan mengingat hal itu, Anda dapat "mengawal" variabel dengan blok berlabel (dalam contoh di bawah <<fn>>``), and set
variable_conflict` untuk memberikan preferensi pada nama kolom, lihat kode di bawah ini:
t=# create or replace function func(
name text
) returns void language plpgsql as
$$
#variable_conflict use_column
<<fn>>
declare name text :='blah';
begin
insert into test (name) values (name)
on conflict (name) do -- this no longer fails
update set name = fn.name;
end;
$$;
t=# insert into test select 'b';
INSERT 0 1
Time: 8.076 ms
t=# select func('b');
func
------
(1 row)
Time: 6.117 ms
t=# select * from test;
name
------
b
blah
(2 rows)
https://www.postgresql.org /docs/current/static/plpgsql-implementation.html#PLPGSQL-VAR-SUBST
dan selanjutnya - pada dasarnya seluruh tautan adalah tentang itu.
Namun - setelah menunjukkan bagaimana tugas tertentu ini dapat dengan mudah dilakukan dengan plpgsql, saya masih mengutip namual: