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

Tạo một bản sao bất biến của concat_ws

Đầu tiên , hàm yêu cầu hai các tham số trong định nghĩa, như Richard đã đề xuất và bạn đã cập nhật câu hỏi của mình cho phù hợp.

Thứ hai , bạn có thể tạo hàm đó bằng "any" nhập bằng LANGUAGE internal . Tuy nhiên, không có nghĩa là bạn nên làm như vậy.

concat_ws() chỉ là STABLE vì một lý do. Trong số những người khác, biểu diễn văn bản của date hoặc timestamp phụ thuộc vào cài đặt ngôn ngữ / kiểu dữ liệu, do đó, kết quả không phải là không thay đổi . Các chỉ mục xây dựng dựa trên điều này có thể bị phá vỡ một cách âm thầm. Bị hạn chế đối với text đầu vào, thật an toàn khi khai báo nó IMMUTABLE .Vì bạn chỉ cần text đầu vào (hoặc varchar , có truyền ngầm thành text ), giới hạn nó trong trường hợp sử dụng của bạn và an toàn:

CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;

Đánh dấu nó là PARALLEL SAFE để không làm hỏng tính song song khi liên quan đến chức năng này. Hướng dẫn sử dụng:

Chống lại sự cám dỗ làm những việc như thế này immutable_concat_ws('|', now()::text, 'foo') . Điều này sẽ giới thiệu lại các phần phụ thuộc đã nói trong cuộc gọi.

Có liên quan:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PSQLException:Không tìm thấy tên cột clazz_ trong Tập kết quả này

  2. Sự khác biệt giữa LIKE và ~ trong Postgres

  3. Oracle đến PostgreSQL:Cú pháp nối ngoài ANSI trong PostgreSQL

  4. Thêm đối tượng Postgres vào Template1

  5. Làm cách nào để đếm ngày Chủ nhật của tháng hiện tại bằng psql?