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

Làm cách nào để tạo một chuỗi duy nhất cho mỗi bản ghi trong bảng trong Postgres?

Tôi không khẳng định những điều sau đây là hiệu quả, nhưng đó là cách chúng tôi đã thực hiện loại việc này trong quá khứ.

CREATE FUNCTION make_uid() RETURNS text AS $$
DECLARE
    new_uid text;
    done bool;
BEGIN
    done := false;
    WHILE NOT done LOOP
        new_uid := md5(''||now()::text||random()::text);
        done := NOT exists(SELECT 1 FROM my_table WHERE uid=new_uid);
    END LOOP;
    RETURN new_uid;
END;
$$ LANGUAGE PLPGSQL VOLATILE;

make_uid() có thể được sử dụng làm mặc định cho một cột trong my_table . Một cái gì đó như:

ALTER TABLE my_table ADD COLUMN uid text NOT NULL DEFAULT make_uid();

md5(''||now()::text||random()::text) có thể được điều chỉnh để hương vị. Bạn có thể xem xét encode(...,'base64') ngoại trừ một số ký tự được sử dụng trong base-64 không thân thiện với URL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dịch vụ cơ sở dữ liệu PostgreSQL

  2. PostgreSQL Full Text Search và Trigram Confusion

  3. Cột 'mary' không tồn tại

  4. Cách tránh bị khóa nhà cung cấp đám mây PostgreSQL

  5. Hiệu suất OLTP kể từ PostgreSQL 8.3