2002-07-18 06:45:51 +02:00
|
|
|
CREATE TABLE x (
|
|
|
|
a serial,
|
|
|
|
b int,
|
|
|
|
c text not null default 'stuff',
|
|
|
|
d text not null,
|
|
|
|
e text
|
|
|
|
);
|
|
|
|
NOTICE: CREATE TABLE will create implicit sequence 'x_a_seq' for SERIAL column 'x.a'
|
2002-08-22 02:01:51 +02:00
|
|
|
CREATE FUNCTION fn_x_before () RETURNS TRIGGER AS '
|
2002-07-18 06:45:51 +02:00
|
|
|
BEGIN
|
|
|
|
NEW.e := ''before trigger fired''::text;
|
|
|
|
return NEW;
|
|
|
|
END;
|
|
|
|
' language 'plpgsql';
|
2002-08-22 02:01:51 +02:00
|
|
|
CREATE FUNCTION fn_x_after () RETURNS TRIGGER AS '
|
2002-07-18 06:45:51 +02:00
|
|
|
BEGIN
|
|
|
|
UPDATE x set e=''after trigger fired'' where c=''stuff'';
|
|
|
|
return NULL;
|
|
|
|
END;
|
|
|
|
' language 'plpgsql';
|
|
|
|
CREATE TRIGGER trg_x_after AFTER INSERT ON x
|
|
|
|
FOR EACH ROW EXECUTE PROCEDURE fn_x_after();
|
|
|
|
CREATE TRIGGER trg_x_before BEFORE INSERT ON x
|
|
|
|
FOR EACH ROW EXECUTE PROCEDURE fn_x_before();
|
2002-07-30 18:55:06 +02:00
|
|
|
COPY x (a, b, c, d, e) from stdin;
|
|
|
|
COPY x (b, d) from stdin;
|
|
|
|
COPY x (b, d) from stdin;
|
|
|
|
COPY x (a, b, c, d, e) from stdin;
|
|
|
|
-- non-existent column in column list: should fail
|
|
|
|
COPY x (xyz) from stdin;
|
2002-08-02 20:15:10 +02:00
|
|
|
ERROR: Relation "x" has no column "xyz"
|
2002-07-30 18:55:06 +02:00
|
|
|
-- too many columns in column list: should fail
|
|
|
|
COPY x (a, b, c, d, e, d, c) from stdin;
|
2002-08-02 20:15:10 +02:00
|
|
|
ERROR: Attribute "d" specified more than once
|
2002-07-30 18:55:06 +02:00
|
|
|
-- missing data: should fail
|
|
|
|
COPY x from stdin;
|
2003-04-24 23:16:45 +02:00
|
|
|
ERROR: pg_atoi: zero-length string
|
|
|
|
CONTEXT: COPY FROM, line 1
|
2002-07-30 18:55:06 +02:00
|
|
|
COPY x from stdin;
|
2003-04-24 23:16:45 +02:00
|
|
|
ERROR: Missing data for column "e"
|
|
|
|
CONTEXT: COPY FROM, line 1
|
2002-07-30 18:55:06 +02:00
|
|
|
COPY x from stdin;
|
2003-04-24 23:16:45 +02:00
|
|
|
ERROR: Missing data for column "e"
|
|
|
|
CONTEXT: COPY FROM, line 1
|
2002-07-30 18:55:06 +02:00
|
|
|
-- extra data: should fail
|
|
|
|
COPY x from stdin;
|
2003-04-24 23:16:45 +02:00
|
|
|
ERROR: Extra data after last expected column
|
|
|
|
CONTEXT: COPY FROM, line 1
|
2002-07-30 18:55:06 +02:00
|
|
|
-- various COPY options: delimiters, oids, NULL string
|
|
|
|
COPY x (b, c, d, e) from stdin with oids delimiter ',' null 'x';
|
2002-08-02 20:15:10 +02:00
|
|
|
-- check results of copy in
|
|
|
|
SELECT * FROM x;
|
|
|
|
a | b | c | d | e
|
|
|
|
-------+----+-------+--------+----------------------
|
|
|
|
10000 | 21 | 31 | 41 | before trigger fired
|
|
|
|
10001 | 22 | 32 | 42 | before trigger fired
|
|
|
|
10002 | 23 | 33 | 43 | before trigger fired
|
|
|
|
10003 | 24 | 34 | 44 | before trigger fired
|
|
|
|
10004 | 25 | 35 | 45 | before trigger fired
|
|
|
|
10005 | 26 | 36 | 46 | before trigger fired
|
|
|
|
6 | | 45 | 80 | before trigger fired
|
|
|
|
1 | 1 | stuff | test_1 | after trigger fired
|
|
|
|
2 | 2 | stuff | test_2 | after trigger fired
|
|
|
|
3 | 3 | stuff | test_3 | after trigger fired
|
|
|
|
4 | 4 | stuff | test_4 | after trigger fired
|
|
|
|
5 | 5 | stuff | test_5 | after trigger fired
|
|
|
|
(12 rows)
|
|
|
|
|
2002-07-30 18:55:06 +02:00
|
|
|
-- COPY w/ oids on a table w/o oids should fail
|
|
|
|
CREATE TABLE no_oids (
|
|
|
|
a int,
|
|
|
|
b int
|
|
|
|
) WITHOUT OIDS;
|
|
|
|
INSERT INTO no_oids (a, b) VALUES (5, 10);
|
|
|
|
INSERT INTO no_oids (a, b) VALUES (20, 30);
|
|
|
|
-- should fail
|
|
|
|
COPY no_oids FROM stdin WITH OIDS;
|
|
|
|
ERROR: COPY: table "no_oids" does not have OIDs
|
|
|
|
COPY no_oids TO stdout WITH OIDS;
|
|
|
|
ERROR: COPY: table "no_oids" does not have OIDs
|
2002-08-02 20:15:10 +02:00
|
|
|
-- check copy out
|
2002-07-18 06:45:51 +02:00
|
|
|
COPY x TO stdout;
|
|
|
|
10000 21 31 41 before trigger fired
|
|
|
|
10001 22 32 42 before trigger fired
|
|
|
|
10002 23 33 43 before trigger fired
|
|
|
|
10003 24 34 44 before trigger fired
|
|
|
|
10004 25 35 45 before trigger fired
|
|
|
|
10005 26 36 46 before trigger fired
|
2002-07-30 18:55:06 +02:00
|
|
|
6 \N 45 80 before trigger fired
|
2002-07-18 06:45:51 +02:00
|
|
|
1 1 stuff test_1 after trigger fired
|
|
|
|
2 2 stuff test_2 after trigger fired
|
|
|
|
3 3 stuff test_3 after trigger fired
|
|
|
|
4 4 stuff test_4 after trigger fired
|
|
|
|
5 5 stuff test_5 after trigger fired
|
2002-07-30 18:55:06 +02:00
|
|
|
COPY x (c, e) TO stdout;
|
|
|
|
31 before trigger fired
|
|
|
|
32 before trigger fired
|
|
|
|
33 before trigger fired
|
|
|
|
34 before trigger fired
|
|
|
|
35 before trigger fired
|
|
|
|
36 before trigger fired
|
|
|
|
45 before trigger fired
|
|
|
|
stuff after trigger fired
|
|
|
|
stuff after trigger fired
|
|
|
|
stuff after trigger fired
|
|
|
|
stuff after trigger fired
|
|
|
|
stuff after trigger fired
|
2002-08-02 20:15:10 +02:00
|
|
|
COPY x (b, e) TO stdout WITH NULL 'I''m null';
|
|
|
|
21 before trigger fired
|
|
|
|
22 before trigger fired
|
|
|
|
23 before trigger fired
|
|
|
|
24 before trigger fired
|
|
|
|
25 before trigger fired
|
|
|
|
26 before trigger fired
|
|
|
|
I'm null before trigger fired
|
|
|
|
1 after trigger fired
|
|
|
|
2 after trigger fired
|
|
|
|
3 after trigger fired
|
|
|
|
4 after trigger fired
|
|
|
|
5 after trigger fired
|
2002-07-18 06:45:51 +02:00
|
|
|
DROP TABLE x;
|
|
|
|
DROP FUNCTION fn_x_before();
|
|
|
|
DROP FUNCTION fn_x_after();
|