Generowanie serii danych jako wierszy tabeli w bazie danych PostgreSQL

Często przy pracy z bazami danych przydaje się generowanie wierszy w sekwencjami. W bazie danych Postgres do wygenerowania takich danych użyteczna jest funkcja generate_series.

Przykładowo jeśli potrzebujemy wygenerować wiersze dla wszystkich miesięcy, które potem użyjemy do łączenia z innymi tabelami możemy to zrobić w następujący sposób.

select * from generate_series( 1, 12 )

Innym ciekawym zastosowaniem jest sprawdzanie czy nie ma luki w numeracji. Przykładowo jeśli mamy tabelę zamówienia, w której prawdopodobnie pomiędzy zamówieniem nr 1, a 50 nie ma ciągłości numeracji. Wykorzystując funkcję generate_series tworzony 50 wierszy, które łączymy jednostronnie z zamówieniami. Jeśli, któreś złączenie jest niepełne to znaczy, że danego numeru brakuje.

select gs.id
from ( select generate_series as id
       from generate_series( 1, 50 ) ) gs
      left join orders o on gs.id = o.id
where o.id is null