postgresql/src/test/regress/expected/without_oid.out
Neil Conway 85c0eac1af Add TABLESPACE and ON COMMIT clauses to CREATE TABLE AS. ON COMMIT is
required by the SQL standard, and TABLESPACE is useful functionality.
Patch from Kris Jurka, minor editorialization by Neil Conway.
2006-02-19 00:04:28 +00:00

97 lines
3.0 KiB
Plaintext

--
-- WITHOUT OID
--
--
-- This test tries to verify that WITHOUT OIDS actually saves space.
-- On machines where MAXALIGN is 8, WITHOUT OIDS may or may not save any
-- space, depending on the size of the tuple header + null bitmap.
-- As of 8.0 we need a 9-bit null bitmap to force the difference to appear.
--
CREATE TABLE wi (i INT,
n1 int, n2 int, n3 int, n4 int,
n5 int, n6 int, n7 int, n8 int) WITH OIDS;
CREATE TABLE wo (i INT,
n1 int, n2 int, n3 int, n4 int,
n5 int, n6 int, n7 int, n8 int) WITHOUT OIDS;
INSERT INTO wi VALUES (1); -- 1
INSERT INTO wo SELECT i FROM wi; -- 1
INSERT INTO wo SELECT i+1 FROM wi; -- 1+1=2
INSERT INTO wi SELECT i+1 FROM wo; -- 1+2=3
INSERT INTO wi SELECT i+3 FROM wi; -- 3+3=6
INSERT INTO wo SELECT i+2 FROM wi; -- 2+6=8
INSERT INTO wo SELECT i+8 FROM wo; -- 8+8=16
INSERT INTO wi SELECT i+6 FROM wo; -- 6+16=22
INSERT INTO wi SELECT i+22 FROM wi; -- 22+22=44
INSERT INTO wo SELECT i+16 FROM wi; -- 16+44=60
INSERT INTO wo SELECT i+60 FROM wo; -- 60+60=120
INSERT INTO wi SELECT i+44 FROM wo; -- 44+120=164
INSERT INTO wi SELECT i+164 FROM wi; -- 164+164=328
INSERT INTO wo SELECT i+120 FROM wi; -- 120+328=448
INSERT INTO wo SELECT i+448 FROM wo; -- 448+448=896
INSERT INTO wi SELECT i+328 FROM wo; -- 328+896=1224
INSERT INTO wi SELECT i+1224 FROM wi; -- 1224+1224=2448
INSERT INTO wo SELECT i+896 FROM wi; -- 896+2448=3344
INSERT INTO wo SELECT i+3344 FROM wo; -- 3344+3344=6688
INSERT INTO wi SELECT i+2448 FROM wo; -- 2448+6688=9136
INSERT INTO wo SELECT i+6688 FROM wi WHERE i<=2448; -- 6688+2448=9136
SELECT count(oid) FROM wi;
count
-------
9136
(1 row)
-- should fail
SELECT count(oid) FROM wo;
ERROR: column "oid" does not exist
VACUUM ANALYZE wi;
VACUUM ANALYZE wo;
SELECT min(relpages) < max(relpages), min(reltuples) - max(reltuples)
FROM pg_class
WHERE relname IN ('wi', 'wo');
?column? | ?column?
----------+----------
t | 0
(1 row)
DROP TABLE wi;
DROP TABLE wo;
--
-- WITH / WITHOUT OIDS in CREATE TABLE AS
--
CREATE TABLE create_table_test (
a int,
b int
);
COPY create_table_test FROM stdin;
CREATE TABLE create_table_test2 WITH OIDS AS
SELECT a + b AS c1, a - b AS c2 FROM create_table_test;
CREATE TABLE create_table_test3 WITHOUT OIDS AS
SELECT a + b AS c1, a - b AS c2 FROM create_table_test;
SELECT count(oid) FROM create_table_test2;
count
-------
2
(1 row)
-- should fail
SELECT count(oid) FROM create_table_test3;
ERROR: column "oid" does not exist
PREPARE table_source(int) AS
SELECT a + b AS c1, a - b AS c2, $1 AS c3 FROM create_table_test;
CREATE TABLE execute_with WITH OIDS AS EXECUTE table_source(1);
CREATE TABLE execute_without WITHOUT OIDS AS EXECUTE table_source(2);
SELECT count(oid) FROM execute_with;
count
-------
2
(1 row)
-- should fail
SELECT count(oid) FROM execute_without;
ERROR: column "oid" does not exist
DROP TABLE create_table_test;
DROP TABLE create_table_test2;
DROP TABLE create_table_test3;
DROP TABLE execute_with;
DROP TABLE execute_without;