Regression tests for TOAST.
Kevin Grittner, per discussion of bug #5989
This commit is contained in:
parent
b429519d8d
commit
97e8346851
|
@ -1,11 +1,12 @@
|
||||||
CREATE TABLE delete_test (
|
CREATE TABLE delete_test (
|
||||||
id SERIAL PRIMARY KEY,
|
id SERIAL PRIMARY KEY,
|
||||||
a INT
|
a INT,
|
||||||
|
b text
|
||||||
);
|
);
|
||||||
NOTICE: CREATE TABLE will create implicit sequence "delete_test_id_seq" for serial column "delete_test.id"
|
NOTICE: CREATE TABLE will create implicit sequence "delete_test_id_seq" for serial column "delete_test.id"
|
||||||
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "delete_test_pkey" for table "delete_test"
|
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "delete_test_pkey" for table "delete_test"
|
||||||
INSERT INTO delete_test (a) VALUES (10);
|
INSERT INTO delete_test (a) VALUES (10);
|
||||||
INSERT INTO delete_test (a) VALUES (50);
|
INSERT INTO delete_test (a, b) VALUES (50, repeat('x', 10000));
|
||||||
INSERT INTO delete_test (a) VALUES (100);
|
INSERT INTO delete_test (a) VALUES (100);
|
||||||
-- allow an alias to be specified for DELETE's target table
|
-- allow an alias to be specified for DELETE's target table
|
||||||
DELETE FROM delete_test AS dt WHERE dt.a > 75;
|
DELETE FROM delete_test AS dt WHERE dt.a > 75;
|
||||||
|
@ -16,11 +17,19 @@ ERROR: invalid reference to FROM-clause entry for table "delete_test"
|
||||||
LINE 1: DELETE FROM delete_test dt WHERE delete_test.a > 25;
|
LINE 1: DELETE FROM delete_test dt WHERE delete_test.a > 25;
|
||||||
^
|
^
|
||||||
HINT: Perhaps you meant to reference the table alias "dt".
|
HINT: Perhaps you meant to reference the table alias "dt".
|
||||||
SELECT * FROM delete_test;
|
SELECT id, a, char_length(b) FROM delete_test;
|
||||||
id | a
|
id | a | char_length
|
||||||
----+----
|
----+----+-------------
|
||||||
1 | 10
|
1 | 10 |
|
||||||
2 | 50
|
2 | 50 | 10000
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
|
-- delete a row with a TOASTed value
|
||||||
|
DELETE FROM delete_test WHERE a > 25;
|
||||||
|
SELECT id, a, char_length(b) FROM delete_test;
|
||||||
|
id | a | char_length
|
||||||
|
----+----+-------------
|
||||||
|
1 | 10 |
|
||||||
|
(1 row)
|
||||||
|
|
||||||
DROP TABLE delete_test;
|
DROP TABLE delete_test;
|
||||||
|
|
|
@ -62,4 +62,21 @@ select * from inserttest;
|
||||||
2 | 3 | values are fun!
|
2 | 3 | values are fun!
|
||||||
(7 rows)
|
(7 rows)
|
||||||
|
|
||||||
|
--
|
||||||
|
-- TOASTed value test
|
||||||
|
--
|
||||||
|
insert into inserttest values(30, 50, repeat('x', 10000));
|
||||||
|
select col1, col2, char_length(col3) from inserttest;
|
||||||
|
col1 | col2 | char_length
|
||||||
|
------+------+-------------
|
||||||
|
| 3 | 7
|
||||||
|
| 5 | 7
|
||||||
|
| 5 | 4
|
||||||
|
| 7 | 7
|
||||||
|
10 | 20 | 2
|
||||||
|
-1 | 2 | 7
|
||||||
|
2 | 3 | 15
|
||||||
|
30 | 50 | 10000
|
||||||
|
(8 rows)
|
||||||
|
|
||||||
drop table inserttest;
|
drop table inserttest;
|
||||||
|
|
|
@ -87,4 +87,13 @@ ERROR: invalid reference to FROM-clause entry for table "update_test"
|
||||||
LINE 1: UPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a...
|
LINE 1: UPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a...
|
||||||
^
|
^
|
||||||
HINT: Perhaps you meant to reference the table alias "t".
|
HINT: Perhaps you meant to reference the table alias "t".
|
||||||
|
-- Make sure that we can update to a TOASTed value.
|
||||||
|
UPDATE update_test SET c = repeat('x', 10000) WHERE c = 'car';
|
||||||
|
SELECT a, b, char_length(c) FROM update_test;
|
||||||
|
a | b | char_length
|
||||||
|
-----+----+-------------
|
||||||
|
100 | 20 |
|
||||||
|
11 | 41 | 10000
|
||||||
|
(2 rows)
|
||||||
|
|
||||||
DROP TABLE update_test;
|
DROP TABLE update_test;
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
CREATE TABLE delete_test (
|
CREATE TABLE delete_test (
|
||||||
id SERIAL PRIMARY KEY,
|
id SERIAL PRIMARY KEY,
|
||||||
a INT
|
a INT,
|
||||||
|
b text
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO delete_test (a) VALUES (10);
|
INSERT INTO delete_test (a) VALUES (10);
|
||||||
INSERT INTO delete_test (a) VALUES (50);
|
INSERT INTO delete_test (a, b) VALUES (50, repeat('x', 10000));
|
||||||
INSERT INTO delete_test (a) VALUES (100);
|
INSERT INTO delete_test (a) VALUES (100);
|
||||||
|
|
||||||
-- allow an alias to be specified for DELETE's target table
|
-- allow an alias to be specified for DELETE's target table
|
||||||
|
@ -14,6 +15,11 @@ DELETE FROM delete_test AS dt WHERE dt.a > 75;
|
||||||
-- to be referenced
|
-- to be referenced
|
||||||
DELETE FROM delete_test dt WHERE delete_test.a > 25;
|
DELETE FROM delete_test dt WHERE delete_test.a > 25;
|
||||||
|
|
||||||
SELECT * FROM delete_test;
|
SELECT id, a, char_length(b) FROM delete_test;
|
||||||
|
|
||||||
|
-- delete a row with a TOASTed value
|
||||||
|
DELETE FROM delete_test WHERE a > 25;
|
||||||
|
|
||||||
|
SELECT id, a, char_length(b) FROM delete_test;
|
||||||
|
|
||||||
DROP TABLE delete_test;
|
DROP TABLE delete_test;
|
||||||
|
|
|
@ -28,4 +28,11 @@ insert into inserttest values(10, 20, '40'), (-1, 2, DEFAULT),
|
||||||
|
|
||||||
select * from inserttest;
|
select * from inserttest;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- TOASTed value test
|
||||||
|
--
|
||||||
|
insert into inserttest values(30, 50, repeat('x', 10000));
|
||||||
|
|
||||||
|
select col1, col2, char_length(col3) from inserttest;
|
||||||
|
|
||||||
drop table inserttest;
|
drop table inserttest;
|
||||||
|
|
|
@ -54,4 +54,8 @@ UPDATE update_test SET (a,b) = (select a,b FROM update_test where c = 'foo')
|
||||||
-- to the original table name
|
-- to the original table name
|
||||||
UPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a = 10;
|
UPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a = 10;
|
||||||
|
|
||||||
|
-- Make sure that we can update to a TOASTed value.
|
||||||
|
UPDATE update_test SET c = repeat('x', 10000) WHERE c = 'car';
|
||||||
|
SELECT a, b, char_length(c) FROM update_test;
|
||||||
|
|
||||||
DROP TABLE update_test;
|
DROP TABLE update_test;
|
||||||
|
|
Loading…
Reference in New Issue