postgresql/src/test/regress/expected/select.out

787 lines
17 KiB
Plaintext

--
-- SELECT
--
-- btree index
-- awk '{if($1<10){print;}else{next;}}' onek.data | sort +0n -1
--
SELECT * FROM onek
WHERE onek.unique1 < 10
ORDER BY onek.unique1;
unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous | odd | even | stringu1 | stringu2 | string4
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+----------+-----+------+----------+----------+---------
0 | 998 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | AAAAAA | KMBAAA | OOOOxx
1 | 214 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 3 | BAAAAA | GIAAAA | OOOOxx
2 | 326 | 0 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 4 | 5 | CAAAAA | OMAAAA | OOOOxx
3 | 431 | 1 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 6 | 7 | DAAAAA | PQAAAA | VVVVxx
4 | 833 | 0 | 0 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 8 | 9 | EAAAAA | BGBAAA | HHHHxx
5 | 541 | 1 | 1 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 10 | 11 | FAAAAA | VUAAAA | HHHHxx
6 | 978 | 0 | 2 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 12 | 13 | GAAAAA | QLBAAA | OOOOxx
7 | 647 | 1 | 3 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 14 | 15 | HAAAAA | XYAAAA | VVVVxx
8 | 653 | 0 | 0 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 16 | 17 | IAAAAA | DZAAAA | HHHHxx
9 | 49 | 1 | 1 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 18 | 19 | JAAAAA | XBAAAA | HHHHxx
(10 rows)
--
-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1
--
SELECT onek.unique1, onek.stringu1 FROM onek
WHERE onek.unique1 < 20
ORDER BY unique1 using >;
unique1 | stringu1
---------+----------
19 | TAAAAA
18 | SAAAAA
17 | RAAAAA
16 | QAAAAA
15 | PAAAAA
14 | OAAAAA
13 | NAAAAA
12 | MAAAAA
11 | LAAAAA
10 | KAAAAA
9 | JAAAAA
8 | IAAAAA
7 | HAAAAA
6 | GAAAAA
5 | FAAAAA
4 | EAAAAA
3 | DAAAAA
2 | CAAAAA
1 | BAAAAA
0 | AAAAAA
(20 rows)
--
-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2
--
SELECT onek.unique1, onek.stringu1 FROM onek
WHERE onek.unique1 > 980
ORDER BY stringu1 using <;
unique1 | stringu1
---------+----------
988 | AMAAAA
989 | BMAAAA
990 | CMAAAA
991 | DMAAAA
992 | EMAAAA
993 | FMAAAA
994 | GMAAAA
995 | HMAAAA
996 | IMAAAA
997 | JMAAAA
998 | KMAAAA
999 | LMAAAA
981 | TLAAAA
982 | ULAAAA
983 | VLAAAA
984 | WLAAAA
985 | XLAAAA
986 | YLAAAA
987 | ZLAAAA
(19 rows)
--
-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |
-- sort +1d -2 +0nr -1
--
SELECT onek.unique1, onek.string4 FROM onek
WHERE onek.unique1 > 980
ORDER BY string4 using <, unique1 using >;
unique1 | string4
---------+---------
999 | AAAAxx
995 | AAAAxx
983 | AAAAxx
982 | AAAAxx
981 | AAAAxx
998 | HHHHxx
997 | HHHHxx
993 | HHHHxx
990 | HHHHxx
986 | HHHHxx
996 | OOOOxx
991 | OOOOxx
988 | OOOOxx
987 | OOOOxx
985 | OOOOxx
994 | VVVVxx
992 | VVVVxx
989 | VVVVxx
984 | VVVVxx
(19 rows)
--
-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |
-- sort +1dr -2 +0n -1
--
SELECT onek.unique1, onek.string4 FROM onek
WHERE onek.unique1 > 980
ORDER BY string4 using >, unique1 using <;
unique1 | string4
---------+---------
984 | VVVVxx
989 | VVVVxx
992 | VVVVxx
994 | VVVVxx
985 | OOOOxx
987 | OOOOxx
988 | OOOOxx
991 | OOOOxx
996 | OOOOxx
986 | HHHHxx
990 | HHHHxx
993 | HHHHxx
997 | HHHHxx
998 | HHHHxx
981 | AAAAxx
982 | AAAAxx
983 | AAAAxx
995 | AAAAxx
999 | AAAAxx
(19 rows)
--
-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |
-- sort +0nr -1 +1d -2
--
SELECT onek.unique1, onek.string4 FROM onek
WHERE onek.unique1 < 20
ORDER BY unique1 using >, string4 using <;
unique1 | string4
---------+---------
19 | OOOOxx
18 | VVVVxx
17 | HHHHxx
16 | OOOOxx
15 | VVVVxx
14 | AAAAxx
13 | OOOOxx
12 | AAAAxx
11 | OOOOxx
10 | AAAAxx
9 | HHHHxx
8 | HHHHxx
7 | VVVVxx
6 | OOOOxx
5 | HHHHxx
4 | HHHHxx
3 | VVVVxx
2 | OOOOxx
1 | OOOOxx
0 | OOOOxx
(20 rows)
--
-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |
-- sort +0n -1 +1dr -2
--
SELECT onek.unique1, onek.string4 FROM onek
WHERE onek.unique1 < 20
ORDER BY unique1 using <, string4 using >;
unique1 | string4
---------+---------
0 | OOOOxx
1 | OOOOxx
2 | OOOOxx
3 | VVVVxx
4 | HHHHxx
5 | HHHHxx
6 | OOOOxx
7 | VVVVxx
8 | HHHHxx
9 | HHHHxx
10 | AAAAxx
11 | OOOOxx
12 | AAAAxx
13 | OOOOxx
14 | AAAAxx
15 | VVVVxx
16 | OOOOxx
17 | HHHHxx
18 | VVVVxx
19 | OOOOxx
(20 rows)
--
-- test partial btree indexes
--
-- As of 7.2, planner probably won't pick an indexscan without stats,
-- so ANALYZE first. Also, we want to prevent it from picking a bitmapscan
-- followed by sort, because that could hide index ordering problems.
--
ANALYZE onek2;
SET enable_seqscan TO off;
SET enable_bitmapscan TO off;
SET enable_sort TO off;
--
-- awk '{if($1<10){print $0;}else{next;}}' onek.data | sort +0n -1
--
SELECT onek2.* FROM onek2 WHERE onek2.unique1 < 10;
unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous | odd | even | stringu1 | stringu2 | string4
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+----------+-----+------+----------+----------+---------
0 | 998 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | AAAAAA | KMBAAA | OOOOxx
1 | 214 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 3 | BAAAAA | GIAAAA | OOOOxx
2 | 326 | 0 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 4 | 5 | CAAAAA | OMAAAA | OOOOxx
3 | 431 | 1 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 6 | 7 | DAAAAA | PQAAAA | VVVVxx
4 | 833 | 0 | 0 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 8 | 9 | EAAAAA | BGBAAA | HHHHxx
5 | 541 | 1 | 1 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 10 | 11 | FAAAAA | VUAAAA | HHHHxx
6 | 978 | 0 | 2 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 12 | 13 | GAAAAA | QLBAAA | OOOOxx
7 | 647 | 1 | 3 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 14 | 15 | HAAAAA | XYAAAA | VVVVxx
8 | 653 | 0 | 0 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 16 | 17 | IAAAAA | DZAAAA | HHHHxx
9 | 49 | 1 | 1 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 18 | 19 | JAAAAA | XBAAAA | HHHHxx
(10 rows)
--
-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1
--
SELECT onek2.unique1, onek2.stringu1 FROM onek2
WHERE onek2.unique1 < 20
ORDER BY unique1 using >;
unique1 | stringu1
---------+----------
19 | TAAAAA
18 | SAAAAA
17 | RAAAAA
16 | QAAAAA
15 | PAAAAA
14 | OAAAAA
13 | NAAAAA
12 | MAAAAA
11 | LAAAAA
10 | KAAAAA
9 | JAAAAA
8 | IAAAAA
7 | HAAAAA
6 | GAAAAA
5 | FAAAAA
4 | EAAAAA
3 | DAAAAA
2 | CAAAAA
1 | BAAAAA
0 | AAAAAA
(20 rows)
--
-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2
--
SELECT onek2.unique1, onek2.stringu1 FROM onek2
WHERE onek2.unique1 > 980;
unique1 | stringu1
---------+----------
981 | TLAAAA
982 | ULAAAA
983 | VLAAAA
984 | WLAAAA
985 | XLAAAA
986 | YLAAAA
987 | ZLAAAA
988 | AMAAAA
989 | BMAAAA
990 | CMAAAA
991 | DMAAAA
992 | EMAAAA
993 | FMAAAA
994 | GMAAAA
995 | HMAAAA
996 | IMAAAA
997 | JMAAAA
998 | KMAAAA
999 | LMAAAA
(19 rows)
RESET enable_seqscan;
RESET enable_bitmapscan;
RESET enable_sort;
SELECT two, stringu1, ten, string4
INTO TABLE tmp
FROM onek;
--
-- awk '{print $1,$2;}' person.data |
-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |
-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |
-- awk 'BEGIN{FS=" ";}{if(NF!=2){print $4,$5;}else{print;}}' - stud_emp.data
--
-- SELECT name, age FROM person*; ??? check if different
SELECT p.name, p.age FROM person* p;
name | age
---------+-----
mike | 40
joe | 20
sally | 34
sandra | 19
alex | 30
sue | 50
denise | 24
sarah | 88
teresa | 38
nan | 28
leah | 68
wendy | 78
melissa | 28
joan | 18
mary | 8
jane | 58
liza | 38
jean | 28
jenifer | 38
juanita | 58
susan | 78
zena | 98
martie | 88
chris | 78
pat | 18
zola | 58
louise | 98
edna | 18
bertha | 88
sumi | 38
koko | 88
gina | 18
rean | 48
sharon | 78
paula | 68
julie | 68
belinda | 38
karen | 48
carina | 58
diane | 18
esther | 98
trudy | 88
fanny | 8
carmen | 78
lita | 25
pamela | 48
sandy | 38
trisha | 88
uma | 78
velma | 68
sharon | 25
sam | 30
bill | 20
fred | 28
larry | 60
jeff | 23
cim | 30
linda | 19
(58 rows)
--
-- awk '{print $1,$2;}' person.data |
-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |
-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |
-- awk 'BEGIN{FS=" ";}{if(NF!=1){print $4,$5;}else{print;}}' - stud_emp.data |
-- sort +1nr -2
--
SELECT p.name, p.age FROM person* p ORDER BY age using >, name;
name | age
---------+-----
esther | 98
louise | 98
zena | 98
bertha | 88
koko | 88
martie | 88
sarah | 88
trisha | 88
trudy | 88
carmen | 78
chris | 78
sharon | 78
susan | 78
uma | 78
wendy | 78
julie | 68
leah | 68
paula | 68
velma | 68
larry | 60
carina | 58
jane | 58
juanita | 58
zola | 58
sue | 50
karen | 48
pamela | 48
rean | 48
mike | 40
belinda | 38
jenifer | 38
liza | 38
sandy | 38
sumi | 38
teresa | 38
sally | 34
alex | 30
cim | 30
sam | 30
fred | 28
jean | 28
melissa | 28
nan | 28
lita | 25
sharon | 25
denise | 24
jeff | 23
bill | 20
joe | 20
linda | 19
sandra | 19
diane | 18
edna | 18
gina | 18
joan | 18
pat | 18
fanny | 8
mary | 8
(58 rows)
--
-- Test some cases involving whole-row Var referencing a subquery
--
select foo from (select 1) as foo;
foo
-----
(1)
(1 row)
select foo from (select null) as foo;
foo
-----
()
(1 row)
select foo from (select 'xyzzy',1,null) as foo;
foo
------------
(xyzzy,1,)
(1 row)
--
-- Test VALUES lists
--
select * from onek, (values(147, 'RFAAAA'), (931, 'VJAAAA')) as v (i, j)
WHERE onek.unique1 = v.i and onek.stringu1 = v.j;
unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous | odd | even | stringu1 | stringu2 | string4 | i | j
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+----------+-----+------+----------+----------+---------+-----+--------
147 | 0 | 1 | 3 | 7 | 7 | 7 | 47 | 147 | 147 | 147 | 14 | 15 | RFAAAA | AAAAAA | AAAAxx | 147 | RFAAAA
931 | 1 | 1 | 3 | 1 | 11 | 1 | 31 | 131 | 431 | 931 | 2 | 3 | VJAAAA | BAAAAA | HHHHxx | 931 | VJAAAA
(2 rows)
-- a more complex case
-- looks like we're coding lisp :-)
select * from onek,
(values ((select i from
(values(10000), (2), (389), (1000), (2000), ((select 10029))) as foo(i)
order by i asc limit 1))) bar (i)
where onek.unique1 = bar.i;
unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous | odd | even | stringu1 | stringu2 | string4 | i
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+----------+-----+------+----------+----------+---------+---
2 | 326 | 0 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 4 | 5 | CAAAAA | OMAAAA | OOOOxx | 2
(1 row)
-- try VALUES in a subquery
select * from onek
where (unique1,ten) in (values (1,1), (20,0), (99,9), (17,99))
order by unique1;
unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous | odd | even | stringu1 | stringu2 | string4
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+----------+-----+------+----------+----------+---------
1 | 214 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 3 | BAAAAA | GIAAAA | OOOOxx
20 | 306 | 0 | 0 | 0 | 0 | 0 | 20 | 20 | 20 | 20 | 0 | 1 | UAAAAA | ULAAAA | OOOOxx
99 | 101 | 1 | 3 | 9 | 19 | 9 | 99 | 99 | 99 | 99 | 18 | 19 | VDAAAA | XDAAAA | HHHHxx
(3 rows)
-- VALUES is also legal as a standalone query or a set-operation member
VALUES (1,2), (3,4+4), (7,77.7);
column1 | column2
---------+---------
1 | 2
3 | 8
7 | 77.7
(3 rows)
VALUES (1,2), (3,4+4), (7,77.7)
UNION ALL
SELECT 2+2, 57
UNION ALL
TABLE int8_tbl;
column1 | column2
------------------+-------------------
1 | 2
3 | 8
7 | 77.7
4 | 57
123 | 456
123 | 4567890123456789
4567890123456789 | 123
4567890123456789 | 4567890123456789
4567890123456789 | -4567890123456789
(9 rows)
--
-- Test ORDER BY options
--
CREATE TEMP TABLE foo (f1 int);
INSERT INTO foo VALUES (42),(3),(10),(7),(null),(null),(1);
SELECT * FROM foo ORDER BY f1;
f1
----
1
3
7
10
42
(7 rows)
SELECT * FROM foo ORDER BY f1 ASC; -- same thing
f1
----
1
3
7
10
42
(7 rows)
SELECT * FROM foo ORDER BY f1 NULLS FIRST;
f1
----
1
3
7
10
42
(7 rows)
SELECT * FROM foo ORDER BY f1 DESC;
f1
----
42
10
7
3
1
(7 rows)
SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;
f1
----
42
10
7
3
1
(7 rows)
-- check if indexscans do the right things
CREATE INDEX fooi ON foo (f1);
SET enable_sort = false;
SELECT * FROM foo ORDER BY f1;
f1
----
1
3
7
10
42
(7 rows)
SELECT * FROM foo ORDER BY f1 NULLS FIRST;
f1
----
1
3
7
10
42
(7 rows)
SELECT * FROM foo ORDER BY f1 DESC;
f1
----
42
10
7
3
1
(7 rows)
SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;
f1
----
42
10
7
3
1
(7 rows)
DROP INDEX fooi;
CREATE INDEX fooi ON foo (f1 DESC);
SELECT * FROM foo ORDER BY f1;
f1
----
1
3
7
10
42
(7 rows)
SELECT * FROM foo ORDER BY f1 NULLS FIRST;
f1
----
1
3
7
10
42
(7 rows)
SELECT * FROM foo ORDER BY f1 DESC;
f1
----
42
10
7
3
1
(7 rows)
SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;
f1
----
42
10
7
3
1
(7 rows)
DROP INDEX fooi;
CREATE INDEX fooi ON foo (f1 DESC NULLS LAST);
SELECT * FROM foo ORDER BY f1;
f1
----
1
3
7
10
42
(7 rows)
SELECT * FROM foo ORDER BY f1 NULLS FIRST;
f1
----
1
3
7
10
42
(7 rows)
SELECT * FROM foo ORDER BY f1 DESC;
f1
----
42
10
7
3
1
(7 rows)
SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;
f1
----
42
10
7
3
1
(7 rows)
--
-- Test some corner cases that have been known to confuse the planner
--
-- ORDER BY on a constant doesn't really need any sorting
SELECT 1 AS x ORDER BY x;
x
---
1
(1 row)
-- But ORDER BY on a set-valued expression does
create function sillysrf(int) returns setof int as
'values (1),(10),(2),($1)' language sql immutable;
select sillysrf(42);
sillysrf
----------
1
10
2
42
(4 rows)
select sillysrf(-1) order by 1;
sillysrf
----------
-1
1
2
10
(4 rows)
drop function sillysrf(int);
-- X = X isn't a no-op, it's effectively X IS NOT NULL assuming = is strict
-- (see bug #5084)
select * from (values (2),(null),(1)) v(k) where k = k order by k;
k
---
1
2
(2 rows)
select * from (values (2),(null),(1)) v(k) where k = k;
k
---
2
1
(2 rows)