Đầ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: