I would like to generate a grid of (row,column) pairs, like:
1 | 1
1 | 2
1 | 3
...
2 | 1
2 | 2
...
My naive approach has this puzzling behaviour:
select generate_series(1,5), generate_series(1, 5);
 generate_series | generate_series
-----------------+-----------------
               1 |               1
               2 |               2
               3 |               3
               4 |               4
               5 |               5
(5 rows)
select generate_series(1,5), generate_series(1, 4);
 generate_series | generate_series
-----------------+-----------------
               1 |               1
               2 |               2
               3 |               3
               4 |               4
               5 |               1
               1 |               2
               2 |               3
               3 |               4
               4 |               1
               5 |               2
               1 |               3
               2 |               4
               3 |               1
               4 |               2
               5 |               3
               1 |               4
               2 |               1
               3 |               2
               4 |               3
               5 |               4
(20 rows)
It seems to repeat each series until a row is reached that has the final value of each series.
What's the right way to use this function as a sort of cross-join with itself?
 
    