sql >> Database teknologi >  >> RDS >> PostgreSQL

Navngiv hver række i tabellen med en tilfældig 2-ords streng

Det lyder som om du måske vil have et par tilfældigt udvalgte ord fra en ordbog . Det er lidt svært at sige i betragtning af spørgsmålets manglende klarhed.

TILFÆLDIGE ORDBOG ORD

Den bedste måde at vælge tilfældige ordbogsord på er sandsynligvis i PHP-enden ved at bruge en adgangssætningsgenerator, der gør det for dig.

Du kan gøre det i PostgreSQL ved hjælp af en tabel dictionary med ét word per række dog:

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

Ydeevnen vil være virkelig forfærdelig med en stor ordbog. Det kan gøres meget hurtigere, hvis ordbogen ikke ændres, og der er et unikt word_id uden huller i nummereringen, så du kan skrive:

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

mod et bord som dette:

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

Dette vil kun give ensartede resultater, hvis der ikke er huller i ordnummereringen, og hvis word_id er unik eller den PRIMARY KEY . Det kan fremstille det samme ord to gange. Hvis du vil undgå det, skal du bruge en rekursiv CTE eller noget PL/PgSQL.

TILLFÆLDIG GIBBERISH

Hvis du rent faktisk vil have virkelig tilfældige strenge, er det allerede godt dækket her på Stack Overflow. Se Hvordan opretter du en tilfældig streng, der er egnet til et sessions-id i PostgreSQL? blandt andre; se på denne søgning .

For at sikre unikhed skal du blot tilføje en UNIQUE begrænsning. Få din applikation til at teste for at se, om der blev rejst en unik_overtrædelse, da du INSERT ed rækken, og indsæt den med et nyt tilfældigt ID, hvis der opstod en overtrædelse. Hvis du vil, kan du automatisere dette med en PL/PgSQL-hjælperprocedure, selvom den stadig vil være genstand for løb mellem samtidige indsættelser i forskellige transaktioner.



  1. Arranger dubletter og nummerér posterne i en rækkefølge - MySQL

  2. MySQL PHP PDO udarbejdede erklæringer - præstationsproblemer vs. sikkerhed

  3. Rails 4 custom 404 forårsager postgresql-forbindelsesfejl på Heroku

  4. Stop MySQL med at tolerere flere NULL'er i en UNIK begrænsning