Nhanh chóng và không có SQL động
Truyền 16 chữ số hex đầu của UUID trong biểu diễn văn bản dưới dạng chuỗi bit bit(64)
và truyền nó tới bigint
. Xem:
Thuận tiện, các chữ số thập lục phân thừa ở bên phải bị cắt bớt trong quá trình truyền sang bit(64)
tự động - chính xác những gì chúng tôi cần.
Postgres chấp nhận nhiều định dạng khác nhau cho đầu vào. Chuỗi ký tự đã cho của bạn là một trong số chúng:
14607158d3b14ac0b0d82a9a5a9e8f6e
Biểu diễn văn bản mặc định của UUID (và text
đầu ra trong Postgres cho kiểu dữ liệu uuid
) thêm dấu gạch ngang vào những vị trí được xác định trước:
14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
Nếu định dạng đầu vào có thể thay đổi, trước tiên hãy bỏ dấu gạch ngang để đảm bảo:
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
Truyền thực tế uuid
nhập bằng uuid::text
.
db <> fiddle tại đây
Lưu ý rằng Postgres sử dụng đã ký số nguyên, vì vậy bigint
tràn sang số âm ở nửa trên - không liên quan cho mục đích này.
Thiết kế DB
Nếu có thể, hãy thêm bigserial
vào bảng bên dưới và sử dụng cột đó thay thế.