PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Наименуване на всеки ред в таблицата с произволен низ от 2 думи

Изглежда, че може да искате двойка произволно избрани думи от речник . Трудно е да се каже предвид липсата на яснота на въпроса.

СЛУЧАЙНИ ДУМИ В РЕЧНИКА

Най-добрият начин да изберете произволни думи от речника вероятно е в края на PHP, като използвате генератор на пароли, който го прави вместо вас.

Можете да го направите в PostgreSQL, като използвате dictionary на таблица с една word на ред обаче:

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

Производителността ще бъде наистина ужасна с голям речник. Може да стане много по-бързо, ако речникът не се променя и има уникален word_id без пропуски в номерирането, което ви позволява да пишете:

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

срещу таблица като тази:

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

Това ще доведе до последователни резултати само ако няма пропуски в номерирането на думите и ако word_id е уникален или PRIMARY KEY . Може създайте една и съща дума два пъти. Ако искате да избегнете това, ще ви трябва рекурсивен CTE или някакъв PL/PgSQL.

СЛУЧАЙНИ БЪЛЗОРИЯ

Ако наистина искате наистина произволни низове, това вече е добре разгледано тук в Stack Overflow. Вижте Как се създава произволен низ, който е подходящ за идентификатор на сесия в PostgreSQL? между другото; погледнете това търсене .

За да осигурите уникалност, просто добавете UNIQUE ограничение. Тествайте приложението си, за да видите дали при INSERT е повдигнато unique_violation редирайте реда и го вмъкнете с нов произволен идентификатор, ако възникне нарушение. Ако желаете, можете да автоматизирате това с помощта на PL/PgSQL помощна процедура, въпреки че все още ще бъде обект на състезания между едновременни вмъквания в различни транзакции.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Работете с Postgres/PostGIS View в SQLAlchemy

  2. Вземете резултат от заявка в изявление DO

  3. Текстово търсене в Django с частично съвпадение на изречения, актуализация на django3

  4. Показване на най-новите съобщения от таблицата със съобщения, групиране по потребител

  5. postgres db файлове - кой файл представлява конкретната таблица/индекс?