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

Đặt tên cho mỗi hàng trong bảng bằng một chuỗi 2 từ ngẫu nhiên

Có vẻ như bạn có thể muốn một cặp từ được chọn ngẫu nhiên từ từ điển . Thật khó để nói với sự thiếu rõ ràng của câu hỏi.

CÁC TỪ NGỮ NGẪU NHIÊN

Cách tốt nhất để chọn các từ trong từ điển ngẫu nhiên có lẽ là ở phần cuối PHP bằng cách sử dụng trình tạo cụm từ mật khẩu thực hiện điều đó cho bạn.

Bạn có thể làm điều đó trong PostgreSQL bằng cách sử dụng bảng dictionary với một word mỗi hàng, tuy nhiên:

SELECT word FROM dictionary ORDER BY random() LIMIT 2;

Hiệu suất sẽ thực sự khủng khiếp với một từ điển lớn. Việc này có thể được thực hiện nhanh hơn nhiều nếu từ điển không thay đổi và có một word_id duy nhất không có khoảng trống trong đánh số, cho phép bạn viết:

CREATE OR REPLACE FUNCTION get_random_word() RETURNS text AS $$
SELECT word FROM dictionary 
WHERE word_id = (
  SELECT width_bucket(random(), 0, 1, (SELECT max(word_id) FROM dictionary))
);
$$ LANGUAGE sql;

SELECT get_random_word() || ' ' || get_random_word();

chống lại một bảng như thế này:

CREATE TABLE dictionary(word_id serial primary key, word text UNIQUE NOT NULL);

Điều này sẽ chỉ tạo ra kết quả nhất quán nếu không có khoảng trống trong việc đánh số từ và nếu word_id là duy nhất hoặc PRIMARY KEY . Nó có thể sản xuất cùng một từ hai lần. Nếu bạn muốn tránh điều đó, bạn sẽ cần một CTE đệ quy hoặc một số PL / PgSQL.

GIBBERISH NGẪU NHIÊN

Nếu bạn thực sự muốn các chuỗi thực sự ngẫu nhiên, điều đó đã được đề cập ở đây trên Stack Overflow. Xem Cách tạo ngẫu nhiên chuỗi phù hợp với ID phiên trong PostgreSQL? trong số những người khác; xem tìm kiếm này .

Để đảm bảo tính duy nhất, chỉ cần thêm UNIQUE hạn chế. Kiểm tra ứng dụng của bạn để xem liệu unique_violation có được nâng lên khi bạn INSERT không chỉnh sửa hàng và chèn nó với một ID ngẫu nhiên mới nếu vi phạm xảy ra. Nếu muốn, bạn có thể tự động hóa việc này bằng thủ tục trợ giúp PL / PgSQL, mặc dù nó sẽ vẫn phải chạy đua giữa các lần chèn đồng thời trong các giao dịch khác nhau.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LỖI PostgreSQL:INSERT có nhiều cột mục tiêu hơn các biểu thức, khi nó không

  2. Các công cụ thông báo và cảnh báo tốt nhất cho PostgreSQL

  3. Kết nối với Postgresql trong một thùng chứa docker từ bên ngoài

  4. Truy vấn XPath thành dữ liệu phân cấp, duy trì mối quan hệ tổ tiên - con cháu

  5. Lỗi 'Chứng chỉ tự ký' trong khi truy vấn cơ sở dữ liệu Postgres được lưu trữ trên Heroku từ ứng dụng Node.js