PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để phân biệt tên biến plpgsql trong mệnh đề BẬT MÂU THUẪN?

bắt đầu bằng name là một tên xấu cho cả biến và thuộc tính. Khi bạn có cả hai, mã sẽ không đẹp. với ý nghĩ đó, bạn có thể "tiền tố" biến với khối được gắn nhãn (trong ví dụ dưới đây <<fn>>``), and set biến_conflict` để ưu tiên cho tên cột, hãy xem mã bên dưới:

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

và xa hơn nữa - về cơ bản toàn bộ liên kết là về nó.

Chưa hết - sau khi chứng minh tác vụ cụ thể này có thể được thực hiện dễ dàng như thế nào với plpgsql, tôi vẫn trích dẫn 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. số nguyên ngoài phạm vi và dung lượng đĩa còn lại quá nhỏ để chuyển đổi id thành bigint và các giải pháp khác

  2. Kế hoạch truy vấn của các postgres có chỉ mục

  3. Cách chuyển đổi boolean trong postgres trong một truy vấn

  4. PostgreSQL - FATAL:Xác thực danh tính không thành công cho người dùng myuser

  5. Cách thiết lập lược đồ trong pg-promise