PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak odróżnić nazwę zmiennej plpgsql w klauzuli ON CONFLICT?

na początek name to zła nazwa zarówno dla zmiennej, jak i atrybutu. Gdy masz oba, kod nie będzie wyglądał dobrze. mając to na uwadze, możesz "poprzedzić" zmienną blokiem z etykietą (na przykład poniżej <<fn>>``), and set zmienna_konflikt` aby nadać pierwszeństwo nazwie kolumny, zobacz kod poniżej:

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

i dalej - w zasadzie cały link jest o tym.

A jednak - po zademonstrowaniu, jak konkretne zadanie można łatwo wykonać za pomocą plpgsql, nadal cytuję naual:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zakres Rails - gdzie w dokładnych dopasowaniach

  2. Perl - DBI i .pgpass

  3. Zaktualizuj zamówienie zwrotu przez w postgresql

  4. PostgreSQL:W POJEDYNCZEJ SKŁADNI SQL kolejności według wartości liczbowej obliczonej z kolumny tekstowej

  5. Jak połączyć się z bazą danych przez SSH za pomocą DataGrip