Parece que você pode querer um par de palavras selecionadas aleatoriamente de um dicionário . É meio difícil dizer, dada a falta de clareza da pergunta.
PALAVRAS ALEATÓRIAS DO DICIONÁRIO
A melhor maneira de escolher palavras aleatórias do dicionário é provavelmente no final do PHP, usando um gerador de frase secreta que faz isso para você.
Você pode fazer isso no PostgreSQL usando uma tabela
dictionary
com uma word
por linha, no entanto:SELECT word FROM dictionary ORDER BY random() LIMIT 2;
O desempenho será realmente terrível com um dicionário grande. Isso pode ser feito muito mais rápido se o dicionário não mudar e houver um
word_id
exclusivo sem lacunas na numeração, permitindo que você escreva: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();
contra uma tabela como esta:
CREATE TABLE dictionary(word_id serial primary key, word text UNIQUE NOT NULL);
Isso só produzirá resultados consistentes se não houver lacunas na numeração das palavras e se
word_id
é único ou a PRIMARY KEY
. Ele pode produzir a mesma palavra duas vezes. Se você quiser evitar isso, precisará de um CTE recursivo ou algum PL/PgSQL. GIBBERING ALEATÓRIO
Se você realmente quer strings verdadeiramente aleatórias, isso já está bem abordado aqui no Stack Overflow. Consulte Como você cria um string adequada para um ID de sessão no PostgreSQL? entre outros; veja esta pesquisa .
Para garantir a exclusividade, basta adicionar um
UNIQUE
restrição. Faça seu aplicativo testar para ver se uma unique_violation foi gerada quando você INSERT
ed a linha e insira-a com um novo ID aleatório se ocorrer uma violação. Se você quiser, pode automatizar isso com um procedimento auxiliar PL/PgSQL, embora ainda esteja sujeito a corridas entre inserções simultâneas em diferentes transações.