PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara membedakan nama variabel plpgsql dalam klausa ON CONFLICT?

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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemantauan Database PostgreSQL:Kiat untuk Apa yang Harus Dipantau

  2. Cara menyalin satu kolom tabel ke kolom tabel lain di PostgreSQL membandingkan ID yang sama

  3. SUM() Fungsi di PostgreSQL

  4. postgresql 9.5:mencoba membagi string menjadi dua bidang berdasarkan spasi

  5. Buat beberapa instance Postgres di mesin yang sama