123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- --
- -- LIMIT
- -- Check the LIMIT/OFFSET feature of SELECT
- --
- SELECT ''::text AS two, unique1, unique2, stringu1
- FROM onek WHERE unique1 > 50
- ORDER BY unique1 LIMIT 2;
- two | unique1 | unique2 | stringu1
- -----+---------+---------+----------
- | 51 | 76 | ZBAAAA
- | 52 | 985 | ACAAAA
- (2 rows)
- SELECT ''::text AS five, unique1, unique2, stringu1
- FROM onek WHERE unique1 > 60
- ORDER BY unique1 LIMIT 5;
- five | unique1 | unique2 | stringu1
- ------+---------+---------+----------
- | 61 | 560 | JCAAAA
- | 62 | 633 | KCAAAA
- | 63 | 296 | LCAAAA
- | 64 | 479 | MCAAAA
- | 65 | 64 | NCAAAA
- (5 rows)
- SELECT ''::text AS two, unique1, unique2, stringu1
- FROM onek WHERE unique1 > 60 AND unique1 < 63
- ORDER BY unique1 LIMIT 5;
- two | unique1 | unique2 | stringu1
- -----+---------+---------+----------
- | 61 | 560 | JCAAAA
- | 62 | 633 | KCAAAA
- (2 rows)
- SELECT ''::text AS three, unique1, unique2, stringu1
- FROM onek WHERE unique1 > 100
- ORDER BY unique1 LIMIT 3 OFFSET 20;
- three | unique1 | unique2 | stringu1
- -------+---------+---------+----------
- | 121 | 700 | REAAAA
- | 122 | 519 | SEAAAA
- | 123 | 777 | TEAAAA
- (3 rows)
- SELECT ''::text AS zero, unique1, unique2, stringu1
- FROM onek WHERE unique1 < 50
- ORDER BY unique1 DESC LIMIT 8 OFFSET 99;
- zero | unique1 | unique2 | stringu1
- ------+---------+---------+----------
- (0 rows)
- SELECT ''::text AS eleven, unique1, unique2, stringu1
- FROM onek WHERE unique1 < 50
- ORDER BY unique1 DESC LIMIT 20 OFFSET 39;
- eleven | unique1 | unique2 | stringu1
- --------+---------+---------+----------
- | 10 | 520 | KAAAAA
- | 9 | 49 | JAAAAA
- | 8 | 653 | IAAAAA
- | 7 | 647 | HAAAAA
- | 6 | 978 | GAAAAA
- | 5 | 541 | FAAAAA
- | 4 | 833 | EAAAAA
- | 3 | 431 | DAAAAA
- | 2 | 326 | CAAAAA
- | 1 | 214 | BAAAAA
- | 0 | 998 | AAAAAA
- (11 rows)
- SELECT ''::text AS ten, unique1, unique2, stringu1
- FROM onek
- ORDER BY unique1 OFFSET 990;
- ten | unique1 | unique2 | stringu1
- -----+---------+---------+----------
- | 990 | 369 | CMAAAA
- | 991 | 426 | DMAAAA
- | 992 | 363 | EMAAAA
- | 993 | 661 | FMAAAA
- | 994 | 695 | GMAAAA
- | 995 | 144 | HMAAAA
- | 996 | 258 | IMAAAA
- | 997 | 21 | JMAAAA
- | 998 | 549 | KMAAAA
- | 999 | 152 | LMAAAA
- (10 rows)
- SELECT ''::text AS five, unique1, unique2, stringu1
- FROM onek
- ORDER BY unique1 OFFSET 990 LIMIT 5;
- five | unique1 | unique2 | stringu1
- ------+---------+---------+----------
- | 990 | 369 | CMAAAA
- | 991 | 426 | DMAAAA
- | 992 | 363 | EMAAAA
- | 993 | 661 | FMAAAA
- | 994 | 695 | GMAAAA
- (5 rows)
- SELECT ''::text AS five, unique1, unique2, stringu1
- FROM onek
- ORDER BY unique1 LIMIT 5 OFFSET 900;
- five | unique1 | unique2 | stringu1
- ------+---------+---------+----------
- | 900 | 913 | QIAAAA
- | 901 | 931 | RIAAAA
- | 902 | 702 | SIAAAA
- | 903 | 641 | TIAAAA
- | 904 | 793 | UIAAAA
- (5 rows)
- -- Test null limit and offset. The planner would discard a simple null
- -- constant, so to ensure executor is exercised, do this:
- select * from int8_tbl limit (case when random() < 0.5 then null::bigint end);
- q1 | q2
- ------------------+-------------------
- 123 | 456
- 123 | 4567890123456789
- 4567890123456789 | 123
- 4567890123456789 | 4567890123456789
- 4567890123456789 | -4567890123456789
- (5 rows)
- select * from int8_tbl offset (case when random() < 0.5 then null::bigint end);
- q1 | q2
- ------------------+-------------------
- 123 | 456
- 123 | 4567890123456789
- 4567890123456789 | 123
- 4567890123456789 | 4567890123456789
- 4567890123456789 | -4567890123456789
- (5 rows)
- -- Test assorted cases involving backwards fetch from a LIMIT plan node
- begin;
- rollback;
- select sum(tenthous) as s1, sum(tenthous) + random()*0 as s2
- from tenk1 group by thousand order by thousand limit 3;
- s1 | s2
- -------+-------
- 45000 | 45000
- 45010 | 45010
- 45020 | 45020
- (3 rows)
- SELECT thousand
- FROM onek WHERE thousand < 5
- ORDER BY thousand FETCH FIRST 2 ROW ONLY;
- thousand
- ----------
- 0
- 0
- (2 rows)
- -- SKIP LOCKED and WITH TIES are incompatible
- SELECT thousand
- FROM onek WHERE thousand < 5
- ORDER BY thousand FETCH FIRST 1 ROW WITH TIES FOR UPDATE SKIP LOCKED;
- ERROR: SKIP LOCKED and WITH TIES options cannot be used together
- -- should fail
- SELECT ''::text AS two, unique1, unique2, stringu1
- FROM onek WHERE unique1 > 50
- FETCH FIRST 2 ROW WITH TIES;
- ERROR: WITH TIES cannot be specified without ORDER BY clause
- -- leave these views
|