commit f45d0f6bc62369bd1b217c01121e51df439e514d Author: Alexey Masterov Date: Thu Aug 8 10:54:10 2024 +0200 i1 diff --git a/src/test/regress/expected/test_setup_1.out b/src/test/regress/expected/test_setup_1.out new file mode 100644 index 0000000000..1b1efa3ecf --- /dev/null +++ b/src/test/regress/expected/test_setup_1.out @@ -0,0 +1,255 @@ +-- +-- TEST_SETUP --- prepare environment expected by regression test scripts +-- +-- directory paths and dlsuffix are passed to us in environment variables +\getenv abs_srcdir PG_ABS_SRCDIR +\getenv libdir PG_LIBDIR +\getenv dlsuffix PG_DLSUFFIX +\set regresslib :libdir '/regress' :dlsuffix +-- +-- synchronous_commit=off delays when hint bits may be set. Some plans change +-- depending on the number of all-visible pages, which in turn can be +-- influenced by the delayed hint bits. Force synchronous_commit=on to avoid +-- that source of variability. +-- +SET synchronous_commit = on; +-- +-- Postgres formerly made the public schema read/write by default, +-- and most of the core regression tests still expect that. +-- +GRANT ALL ON SCHEMA public TO public; +-- Create a tablespace we can use in tests. +SET allow_in_place_tablespaces = true; +CREATE TABLESPACE regress_tblspace LOCATION ''; +-- +-- These tables have traditionally been referenced by many tests, +-- so create and populate them. Insert only non-error values here. +-- (Some subsequent tests try to insert erroneous values. That's okay +-- because the table won't actually change. Do not change the contents +-- of these tables in later tests, as it may affect other tests.) +-- +CREATE TABLE CHAR_TBL(f1 char(4)); +INSERT INTO CHAR_TBL (f1) VALUES + ('a'), + ('ab'), + ('abcd'), + ('abcd '); +VACUUM CHAR_TBL; +CREATE TABLE FLOAT8_TBL(f1 float8); +INSERT INTO FLOAT8_TBL(f1) VALUES + ('0.0'), + ('-34.84'), + ('-1004.30'), + ('-1.2345678901234e+200'), + ('-1.2345678901234e-200'); +VACUUM FLOAT8_TBL; +CREATE TABLE INT2_TBL(f1 int2); +INSERT INTO INT2_TBL(f1) VALUES + ('0 '), + (' 1234 '), + (' -1234'), + ('32767'), -- largest and smallest values + ('-32767'); +VACUUM INT2_TBL; +CREATE TABLE INT4_TBL(f1 int4); +INSERT INTO INT4_TBL(f1) VALUES + (' 0 '), + ('123456 '), + (' -123456'), + ('2147483647'), -- largest and smallest values + ('-2147483647'); +VACUUM INT4_TBL; +CREATE TABLE INT8_TBL(q1 int8, q2 int8); +INSERT INTO INT8_TBL VALUES + (' 123 ',' 456'), + ('123 ','4567890123456789'), + ('4567890123456789','123'), + (+4567890123456789,'4567890123456789'), + ('+4567890123456789','-4567890123456789'); +VACUUM INT8_TBL; +CREATE TABLE POINT_TBL(f1 point); +INSERT INTO POINT_TBL(f1) VALUES + ('(0.0,0.0)'), + ('(-10.0,0.0)'), + ('(-3.0,4.0)'), + ('(5.1, 34.5)'), + ('(-5.0,-12.0)'), + ('(1e-300,-1e-300)'), -- To underflow + ('(1e+300,Inf)'), -- To overflow + ('(Inf,1e+300)'), -- Transposed + (' ( Nan , NaN ) '), + ('10.0,10.0'); +-- We intentionally don't vacuum point_tbl here; geometry depends on that +CREATE TABLE TEXT_TBL (f1 text); +INSERT INTO TEXT_TBL VALUES + ('doh!'), + ('hi de ho neighbor'); +VACUUM TEXT_TBL; +CREATE TABLE VARCHAR_TBL(f1 varchar(4)); +INSERT INTO VARCHAR_TBL (f1) VALUES + ('a'), + ('ab'), + ('abcd'), + ('abcd '); +VACUUM VARCHAR_TBL; +CREATE TABLE onek ( + unique1 int4, + unique2 int4, + two int4, + four int4, + ten int4, + twenty int4, + hundred int4, + thousand int4, + twothousand int4, + fivethous int4, + tenthous int4, + odd int4, + even int4, + stringu1 name, + stringu2 name, + string4 name +); +\set filename :abs_srcdir '/data/onek.data' +\set command '\\copy onek FROM ' :'filename'; +:command +VACUUM ANALYZE onek; +CREATE TABLE onek2 AS SELECT * FROM onek; +VACUUM ANALYZE onek2; +CREATE TABLE tenk1 ( + unique1 int4, + unique2 int4, + two int4, + four int4, + ten int4, + twenty int4, + hundred int4, + thousand int4, + twothousand int4, + fivethous int4, + tenthous int4, + odd int4, + even int4, + stringu1 name, + stringu2 name, + string4 name +); +\set filename :abs_srcdir '/data/tenk.data' +\set command '\\copy tenk1 FROM ' :'filename'; +:command +VACUUM ANALYZE tenk1; +CREATE TABLE tenk2 AS SELECT * FROM tenk1; +VACUUM ANALYZE tenk2; +CREATE TABLE person ( + name text, + age int4, + location point +); +\set filename :abs_srcdir '/data/person.data' +\set command '\\copy person FROM ' :'filename'; +:command +VACUUM ANALYZE person; +CREATE TABLE emp ( + salary int4, + manager name +) INHERITS (person); +\set filename :abs_srcdir '/data/emp.data' +\set command '\\copy emp FROM ' :'filename'; +:command +VACUUM ANALYZE emp; +CREATE TABLE student ( + gpa float8 +) INHERITS (person); +\set filename :abs_srcdir '/data/student.data' +\set command '\\copy student FROM ' :'filename'; +:command +VACUUM ANALYZE student; +CREATE TABLE stud_emp ( + percent int4 +) INHERITS (emp, student); +NOTICE: merging multiple inherited definitions of column "name" +NOTICE: merging multiple inherited definitions of column "age" +NOTICE: merging multiple inherited definitions of column "location" +\set filename :abs_srcdir '/data/stud_emp.data' +\set command '\\copy stud_emp FROM ' :'filename'; +:command +VACUUM ANALYZE stud_emp; +CREATE TABLE road ( + name text, + thepath path +); +\set filename :abs_srcdir '/data/streets.data' +\set command '\\copy road FROM ' :'filename'; +:command +VACUUM ANALYZE road; +CREATE TABLE ihighway () INHERITS (road); +INSERT INTO ihighway + SELECT * + FROM ONLY road + WHERE name ~ 'I- .*'; +VACUUM ANALYZE ihighway; +CREATE TABLE shighway ( + surface text +) INHERITS (road); +INSERT INTO shighway + SELECT *, 'asphalt' + FROM ONLY road + WHERE name ~ 'State Hwy.*'; +VACUUM ANALYZE shighway; +-- +-- We must have some enum type in the database for opr_sanity and type_sanity. +-- +create type stoplight as enum ('red', 'yellow', 'green'); +-- +-- Also create some non-built-in range types. +-- +create type float8range as range (subtype = float8, subtype_diff = float8mi); +create type textrange as range (subtype = text, collation = "C"); +-- +-- Create some C functions that will be used by various tests. +-- +CREATE FUNCTION binary_coercible(oid, oid) + RETURNS bool + AS :'regresslib', 'binary_coercible' + LANGUAGE C STRICT STABLE PARALLEL SAFE; +ERROR: unexpected path in dynamic library name: /home/alex/neon/vendor/postgres-v16/src/test/regress/regress.so +CREATE FUNCTION ttdummy () + RETURNS trigger + AS :'regresslib' + LANGUAGE C; +ERROR: unexpected path in dynamic library name: /home/alex/neon/vendor/postgres-v16/src/test/regress/regress.so +CREATE FUNCTION get_columns_length(oid[]) + RETURNS int + AS :'regresslib' + LANGUAGE C STRICT STABLE PARALLEL SAFE; +ERROR: unexpected path in dynamic library name: /home/alex/neon/vendor/postgres-v16/src/test/regress/regress.so +-- Use hand-rolled hash functions and operator classes to get predictable +-- result on different machines. The hash function for int4 simply returns +-- the sum of the values passed to it and the one for text returns the length +-- of the non-empty string value passed to it or 0. +create function part_hashint4_noop(value int4, seed int8) + returns int8 as $$ + select value + seed; + $$ language sql strict immutable parallel safe; +create operator class part_test_int4_ops for type int4 using hash as + operator 1 =, + function 2 part_hashint4_noop(int4, int8); +create function part_hashtext_length(value text, seed int8) + returns int8 as $$ + select length(coalesce(value, ''))::int8 + $$ language sql strict immutable parallel safe; +create operator class part_test_text_ops for type text using hash as + operator 1 =, + function 2 part_hashtext_length(text, int8); +-- +-- These functions are used in tests that used to use md5(), which we now +-- mostly avoid so that the tests will pass in FIPS mode. +-- +create function fipshash(bytea) + returns text + strict immutable parallel safe leakproof + return substr(encode(sha256($1), 'hex'), 1, 32); +create function fipshash(text) + returns text + strict immutable parallel safe leakproof + return substr(encode(sha256($1::bytea), 'hex'), 1, 32); diff --git a/src/test/regress/sql/aggregates.sql b/src/test/regress/sql/aggregates.sql index 758ad90651..897334aac9 100644 --- a/src/test/regress/sql/aggregates.sql +++ b/src/test/regress/sql/aggregates.sql @@ -15,7 +15,8 @@ CREATE TABLE aggtest ( ); \set filename :abs_srcdir '/data/agg.data' -COPY aggtest FROM :'filename'; +\set command '\\copy aggtest FROM ' :'filename'; +:command ANALYZE aggtest; diff --git a/src/test/regress/sql/arrays.sql b/src/test/regress/sql/arrays.sql index daf805c382..c791f52cd9 100644 --- a/src/test/regress/sql/arrays.sql +++ b/src/test/regress/sql/arrays.sql @@ -22,7 +22,8 @@ CREATE TABLE array_op_test ( ); \set filename :abs_srcdir '/data/array.data' -COPY array_op_test FROM :'filename'; +\set command '\\copy array_op_test FROM ' :'filename'; +:command ANALYZE array_op_test; -- diff --git a/src/test/regress/sql/copy.sql b/src/test/regress/sql/copy.sql index 43d2e906dd..3fa3b4a837 100644 --- a/src/test/regress/sql/copy.sql +++ b/src/test/regress/sql/copy.sql @@ -20,11 +20,13 @@ insert into copytest values('Mac',E'abc\rdef',3); insert into copytest values(E'esc\\ape',E'a\\r\\\r\\\n\\nb',4); \set filename :abs_builddir '/results/copytest.csv' -copy copytest to :'filename' csv; +\set command '\\copy copytest to ' :'filename' csv; +:command create temp table copytest2 (like copytest); -copy copytest2 from :'filename' csv; +\set command '\\copy copytest2 from ' :'filename' csv; +:command select * from copytest except select * from copytest2; @@ -32,9 +34,11 @@ truncate copytest2; --- same test but with an escape char different from quote char -copy copytest to :'filename' csv quote '''' escape E'\\'; +\set command '\\copy copytest to ' :'filename' csv quote '''' escape E'\\'; +:command -copy copytest2 from :'filename' csv quote '''' escape E'\\'; +\set command '\\copy copytest2 from ' :'filename' csv quote '''' escape E'\\'; +:command select * from copytest except select * from copytest2; @@ -52,7 +56,8 @@ this is just a line full of junk that would error out if parsed 2,b,2 \. -copy copytest3 to stdout csv header; +\set command '\\copy copytest3 to ' stdout csv header; +:command create temp table copytest4 ( c1 int, @@ -64,7 +69,8 @@ this is just a line full of junk that would error out if parsed 2 b \. -copy copytest4 to stdout (header); +\set command '\\copy copytest4 to ' stdout (header); +:command -- test copy from with a partitioned table create table parted_copytest ( @@ -90,12 +96,14 @@ copy (select * from parted_copytest order by a) to :'filename'; truncate parted_copytest; -copy parted_copytest from :'filename'; +\set command '\\copy parted_copytest from ' :'filename'; +:command -- Ensure COPY FREEZE errors for partitioned tables. begin; truncate parted_copytest; -copy parted_copytest from :'filename' (freeze); +\set command '\\copy parted_copytest from ' :'filename' (freeze); +:command rollback; select tableoid::regclass,count(*),sum(a) from parted_copytest @@ -115,7 +123,8 @@ create trigger part_ins_trig for each row execute procedure part_ins_func(); -copy parted_copytest from :'filename'; +\set command '\\copy parted_copytest from ' :'filename'; +:command select tableoid::regclass,count(*),sum(a) from parted_copytest group by tableoid order by tableoid::regclass::name; @@ -124,7 +133,8 @@ truncate table parted_copytest; create index on parted_copytest (b); drop trigger part_ins_trig on parted_copytest_a2; -copy parted_copytest from stdin; +\set command '\\copy parted_copytest from ' stdin; +:command 1 1 str1 2 2 str2 \. @@ -182,7 +192,8 @@ create trigger check_after_tab_progress_reporting execute function notice_after_tab_progress_reporting(); -- Generate COPY FROM report with PIPE. -copy tab_progress_reporting from stdin; +\set command '\\copy tab_progress_reporting from ' stdin; +:command sharon 25 (15,12) 1000 sam sam 30 (10,5) 2000 bill bill 20 (11,10) 1000 sharon @@ -191,7 +202,8 @@ bill 20 (11,10) 1000 sharon -- Generate COPY FROM report with FILE, with some excluded tuples. truncate tab_progress_reporting; \set filename :abs_srcdir '/data/emp.data' -copy tab_progress_reporting from :'filename' +\set command '\\copy tab_progress_reporting from ' :'filename' +:command where (salary < 2000); drop trigger check_after_tab_progress_reporting on tab_progress_reporting; @@ -207,7 +219,8 @@ create table header_copytest ( -- Make sure it works with dropped columns alter table header_copytest drop column c; alter table header_copytest add column c text; -copy header_copytest to stdout with (header match); +\set command '\\copy header_copytest to ' stdout with (header match); +:command copy header_copytest from stdin with (header wrong_choice); -- works copy header_copytest from stdin with (header match); @@ -274,7 +287,8 @@ create temp table oversized_column_default ( col1 varchar(5) DEFAULT 'more than 5 chars', col2 varchar(5)); -- normal COPY should work -copy oversized_column_default from stdin; +\set command '\\copy oversized_column_default from ' stdin; +:command \. -- error if the column is excluded copy oversized_column_default (col2) from stdin; diff --git a/src/test/regress/sql/test_setup.sql b/src/test/regress/sql/test_setup.sql index 1b2d434683..106d4eb2c0 100644 --- a/src/test/regress/sql/test_setup.sql +++ b/src/test/regress/sql/test_setup.sql @@ -135,7 +135,8 @@ CREATE TABLE onek ( ); \set filename :abs_srcdir '/data/onek.data' -COPY onek FROM :'filename'; +\set command '\\copy onek FROM ' :'filename'; +:command VACUUM ANALYZE onek; CREATE TABLE onek2 AS SELECT * FROM onek; @@ -161,7 +162,8 @@ CREATE TABLE tenk1 ( ); \set filename :abs_srcdir '/data/tenk.data' -COPY tenk1 FROM :'filename'; +\set command '\\copy tenk1 FROM ' :'filename'; +:command VACUUM ANALYZE tenk1; CREATE TABLE tenk2 AS SELECT * FROM tenk1; @@ -174,7 +176,8 @@ CREATE TABLE person ( ); \set filename :abs_srcdir '/data/person.data' -COPY person FROM :'filename'; +\set command '\\copy person FROM ' :'filename'; +:command VACUUM ANALYZE person; CREATE TABLE emp ( @@ -183,7 +186,8 @@ CREATE TABLE emp ( ) INHERITS (person); \set filename :abs_srcdir '/data/emp.data' -COPY emp FROM :'filename'; +\set command '\\copy emp FROM ' :'filename'; +:command VACUUM ANALYZE emp; CREATE TABLE student ( @@ -191,7 +195,8 @@ CREATE TABLE student ( ) INHERITS (person); \set filename :abs_srcdir '/data/student.data' -COPY student FROM :'filename'; +\set command '\\copy student FROM ' :'filename'; +:command VACUUM ANALYZE student; CREATE TABLE stud_emp ( @@ -199,7 +204,8 @@ CREATE TABLE stud_emp ( ) INHERITS (emp, student); \set filename :abs_srcdir '/data/stud_emp.data' -COPY stud_emp FROM :'filename'; +\set command '\\copy stud_emp FROM ' :'filename'; +:command VACUUM ANALYZE stud_emp; CREATE TABLE road ( @@ -208,7 +214,8 @@ CREATE TABLE road ( ); \set filename :abs_srcdir '/data/streets.data' -COPY road FROM :'filename'; +\set command '\\copy road FROM ' :'filename'; +:command VACUUM ANALYZE road; CREATE TABLE ihighway () INHERITS (road);