PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Memberi nama setiap baris dalam tabel dengan string 2 kata acak

Sepertinya Anda ingin sepasang kata yang dipilih secara acak dari kamus . Agak sulit untuk mengatakannya karena kurangnya kejelasan pertanyaan.

KATA KAMUS RANDOM

Cara terbaik untuk memilih kata kamus acak mungkin di akhir PHP dengan menggunakan generator frasa sandi yang melakukannya untuk Anda.

Anda dapat melakukannya di PostgreSQL menggunakan tabel dictionary dengan satu word per baris, meskipun:

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

Kinerja akan benar-benar mengerikan dengan kamus besar. Ini dapat dilakukan lebih cepat jika kamus tidak berubah dan ada word_id yang unik tanpa celah dalam penomoran, memungkinkan Anda untuk menulis:

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();

terhadap tabel seperti ini:

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

Ini hanya akan menghasilkan hasil yang konsisten jika tidak ada celah dalam penomoran kata dan jika word_id unik atau PRIMARY KEY . Itu bisa menghasilkan kata yang sama dua kali. Jika Anda ingin menghindarinya, Anda memerlukan CTE rekursif atau PL/PgSQL.

Omong kosong Acak

Jika Anda benar-benar menginginkan string yang benar-benar acak, itu sudah dibahas dengan baik di sini di Stack Overflow. Lihat Bagaimana Anda membuat acak string yang cocok untuk ID sesi di PostgreSQL? diantara yang lain; lihat penelusuran ini .

Untuk memastikan keunikan, cukup tambahkan UNIQUE paksaan. Uji aplikasi Anda untuk melihat apakah unique_violation muncul saat Anda INSERT ed baris, dan masukkan dengan ID acak baru jika terjadi pelanggaran. Jika Anda mau, Anda dapat mengotomatisasi ini dengan prosedur pembantu PL/PgSQL, meskipun itu masih akan tunduk pada balapan antara penyisipan bersamaan dalam transaksi yang berbeda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. doktrin dbal querybuilder sebagai pernyataan yang disiapkan

  2. Mengganti nama beberapa kolom dalam satu pernyataan dengan PostgreSQL

  3. Kueri 'COMMIT' yang tahan lama dengan status 'idle' di pg_stat_activity

  4. Tren PostgreSQL:Penyedia Cloud Paling Populer, Bahasa, VAKUM, Strategi Manajemen Kueri &Jenis Penerapan di Perusahaan

  5. QueryHint ResultSetType.ForwardOnly gagal dengan Spring JPA/EclipseLink