PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Nazywanie każdego wiersza w tabeli losowym ciągiem 2 słów

Wygląda na to, że potrzebujesz pary losowo wybranych słów ze słownika . Trudno powiedzieć, biorąc pod uwagę brak jasności pytania.

losowe słowa ze słownika

Najlepszym sposobem na wybranie losowych słów ze słownika jest prawdopodobnie na końcu PHP za pomocą generatora haseł, który zrobi to za Ciebie.

Możesz to zrobić w PostgreSQL za pomocą tabeli dictionary z jednym word za wiersz, ale:

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

Wydajność będzie naprawdę okropna z dużym słownikiem. Można to zrobić znacznie szybciej, jeśli słownik się nie zmienia i istnieje unikalny word_id bez przerw w numeracji, co pozwala na pisanie:

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

przy takim stole:

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

Daje to spójne wyniki tylko wtedy, gdy nie ma przerw w numeracji słów i jeśli word_id jest unikalny lub PRIMARY KEY . może wyprodukuj to samo słowo dwa razy. Jeśli chcesz tego uniknąć, będziesz potrzebować rekurencyjnego CTE lub jakiegoś PL/PgSQL.

losowy bełkot

Jeśli naprawdę chcesz naprawdę losowych ciągów, jest to już dobrze omówione tutaj na Stack Overflow. Zobacz Jak utworzyć losowy ciąg odpowiedni dla identyfikatora sesji w PostgreSQL? pośród innych; spójrz na to wyszukiwanie .

Aby zapewnić niepowtarzalność, po prostu dodaj UNIQUE ograniczenie. Przetestuj swoją aplikację, aby sprawdzić, czy podczas INSERT zostało zgłoszone unikatowe_naruszenie ed wiersz i wstaw go z nowym losowym identyfikatorem, jeśli wystąpiło naruszenie. Jeśli chcesz, możesz to zautomatyzować za pomocą procedury pomocniczej PL/PgSQL, chociaż nadal będzie to podlegać wyścigom między równoczesnymi wstawkami w różnych transakcjach.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak porównać dwie tablice i wybrać tylko niepasujące elementy W postgres

  2. Jak działa current_date w PostgreSQL

  3. Tłumaczenie zapytania z Firebird na PostgreSQL

  4. Dynamiczne zapytanie przestawne przy użyciu PostgreSQL 9.3

  5. aktualizowanie wierszy tabeli w postgresie za pomocą podzapytania