sql >> Database >  >> RDS >> PostgreSQL

Elke rij in de tabel een naam geven met een willekeurige reeks van 2 woorden

Het klinkt alsof je een paar willekeurig geselecteerde woorden wilt hebben uit een woordenboek . Het is een beetje moeilijk te zeggen gezien het gebrek aan duidelijkheid van de vraag.

WILLEKEURIGE WOORDEN WOORDEN

De beste manier om willekeurige woordenboekwoorden te kiezen, is waarschijnlijk aan het einde van PHP door een wachtwoordzingenerator te gebruiken die dit voor u doet.

Je kunt het doen in PostgreSQL met behulp van een tabel dictionary met één word per rij echter:

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

De prestaties zullen echt verschrikkelijk zijn met een groot woordenboek. Het kan veel sneller als het woordenboek niet verandert en er een unieke word_id is zonder gaten in de nummering, zodat u kunt schrijven:

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

tegen een tafel als deze:

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

Dit levert alleen consistente resultaten op als er geen gaten in de woordnummering zijn en als word_id is uniek of de PRIMARY KEY . Het kan twee keer hetzelfde woord produceren. Als je dat wilt vermijden, heb je een recursieve CTE of wat PL/PgSQL nodig.

WILLEKEURIG GIBBERISH

Als je echt willekeurige strings wilt, is dat hier al goed behandeld op Stack Overflow. Zie Hoe maak je een willekeurige string die geschikt is voor een sessie-ID in PostgreSQL? onder andere; bekijk deze zoekopdracht .

Voeg gewoon een UNIQUE . toe om uniek te zijn beperking. Laat uw applicatie testen om te zien of er een unique_violation is opgetreden toen u INSERT wijzig de rij en voeg deze in met een nieuwe willekeurige ID als er een overtreding is opgetreden. Als je wilt, kun je dit automatiseren met een PL/PgSQL-helperprocedure, hoewel het nog steeds onderhevig zal zijn aan races tussen gelijktijdige inserts in verschillende transacties.



  1. Oracle installeren op een Mac

  2. Hoe stel je een maximale uitvoeringstijd in voor een mysql-query?

  3. Salesforce TLS 1.0 Beëindiging

  4. SSRS 2016 Gegevensbron geeft Oracle-verbindingstype niet weer