wybór rekordu o losowym id które jeszcze nie istnieje

0

Więc przykładowa tabela x z polem id

id
4
5
8
3

i teraz jak wybrać losowe id z przedziału powiedzmy 1-10 które jeszcze nie istnieje w tabeli x mógłbym zrobić co prawda tak

id exists
1 false
2 false
3 true
4 true

itd. ale tych rekordów ma być o wiele więcej niż 10 więc szukam jakiegoś optymalniejszego rozwiązania.

1

Coś takiego

SELECT gs as id
FROM generate_series( 1, (select max( id ) from x)  ) gs
WHERE NOT EXISTS(
	SELECT null FROM x
	WHERE gs.gs = x.id 
   )
ORDER BY random()
LIMIT 1;

czy to będzie optymalne dla 10 mln rekordów to nie wiem,
ale jak mamy losować z całej puli "dziur", to chyba nic lepszego się nie wymyśli.

1 użytkowników online, w tym zalogowanych: 0, gości: 1