mirror of
https://github.com/postgres/postgres.git
synced 2025-12-12 02:37:31 +03:00
COMMENT ON casts, conversions, languages, operator classes, and
large objects. Dump all these in pg_dump; also add code to pg_dump user-defined conversions. Make psql's large object code rely on the backend for inserting/deleting LOB comments, instead of trying to hack pg_description directly. Documentation and regression tests added. Christopher Kings-Lynne, code reviewed by Tom
This commit is contained in:
@@ -3,6 +3,10 @@
|
||||
-- add attribute
|
||||
--
|
||||
CREATE TABLE tmp (initial int4);
|
||||
COMMENT ON TABLE tmp_wrong IS 'table comment';
|
||||
ERROR: relation "tmp_wrong" does not exist
|
||||
COMMENT ON TABLE tmp IS 'table comment';
|
||||
COMMENT ON TABLE tmp IS NULL;
|
||||
ALTER TABLE tmp ADD COLUMN a int4;
|
||||
ALTER TABLE tmp ADD COLUMN b name;
|
||||
ALTER TABLE tmp ADD COLUMN c text;
|
||||
|
||||
@@ -18,6 +18,11 @@ CREATE DEFAULT CONVERSION public.mydef FOR 'LATIN1' TO 'UNICODE' FROM iso8859_1_
|
||||
--
|
||||
CREATE DEFAULT CONVERSION public.mydef2 FOR 'LATIN1' TO 'UNICODE' FROM iso8859_1_to_utf8;
|
||||
ERROR: default conversion for LATIN1 to UNICODE already exists
|
||||
-- test comments
|
||||
COMMENT ON CONVERSION myconv_bad IS 'foo';
|
||||
ERROR: conversion "myconv_bad" does not exist
|
||||
COMMENT ON CONVERSION myconv IS 'bar';
|
||||
COMMENT ON CONVERSION myconv IS NULL;
|
||||
--
|
||||
-- drop user defined conversion
|
||||
--
|
||||
|
||||
@@ -7,6 +7,11 @@ CREATE AGGREGATE newavg (
|
||||
finalfunc = numeric_avg,
|
||||
initcond1 = '{0,0,0}'
|
||||
);
|
||||
-- test comments
|
||||
COMMENT ON AGGREGATE newavg_wrong (int4) IS 'an agg comment';
|
||||
ERROR: aggregate newavg_wrong(integer) does not exist
|
||||
COMMENT ON AGGREGATE newavg (int4) IS 'an agg comment';
|
||||
COMMENT ON AGGREGATE newavg (int4) IS NULL;
|
||||
-- without finalfunc; test obsolete spellings 'sfunc1' etc
|
||||
CREATE AGGREGATE newsum (
|
||||
sfunc1 = int4pl, basetype = int4, stype1 = int4,
|
||||
@@ -17,3 +22,7 @@ CREATE AGGREGATE newcnt (
|
||||
sfunc = int4inc, basetype = 'any', stype = int4,
|
||||
initcond = '0'
|
||||
);
|
||||
COMMENT ON AGGREGATE nosuchagg (*) IS 'should fail';
|
||||
ERROR: aggregate nosuchagg(*) does not exist
|
||||
COMMENT ON AGGREGATE newcnt (*) IS 'an any agg comment';
|
||||
COMMENT ON AGGREGATE newcnt (*) IS NULL;
|
||||
|
||||
@@ -18,6 +18,11 @@ CREATE INDEX tenk2_hundred ON tenk2 USING btree(hundred int4_ops);
|
||||
CREATE INDEX rix ON road USING btree (name text_ops);
|
||||
CREATE INDEX iix ON ihighway USING btree (name text_ops);
|
||||
CREATE INDEX six ON shighway USING btree (name text_ops);
|
||||
-- test comments
|
||||
COMMENT ON INDEX six_wrong IS 'bad index';
|
||||
ERROR: relation "six_wrong" does not exist
|
||||
COMMENT ON INDEX six IS 'good index';
|
||||
COMMENT ON INDEX six IS NULL;
|
||||
--
|
||||
-- BTREE ascending/descending cases
|
||||
--
|
||||
|
||||
@@ -26,3 +26,8 @@ CREATE OPERATOR #%# (
|
||||
leftarg = int4, -- right unary
|
||||
procedure = int4fac
|
||||
);
|
||||
-- Test comments
|
||||
COMMENT ON OPERATOR ###### (int4, NONE) IS 'bad right unary';
|
||||
ERROR: operator does not exist: integer ######
|
||||
COMMENT ON OPERATOR #%# (int4, NONE) IS 'right unary';
|
||||
COMMENT ON OPERATOR #%# (int4, NONE) IS NULL;
|
||||
|
||||
@@ -71,6 +71,11 @@ SELECT * FROM get_default_test();
|
||||
zippo | 42
|
||||
(1 row)
|
||||
|
||||
-- Test comments
|
||||
COMMENT ON TYPE bad IS 'bad comment';
|
||||
ERROR: type "bad" does not exist
|
||||
COMMENT ON TYPE default_test_row IS 'good comment';
|
||||
COMMENT ON TYPE default_test_row IS NULL;
|
||||
DROP TYPE default_test_row CASCADE;
|
||||
NOTICE: drop cascades to function get_default_test()
|
||||
DROP TABLE default_test;
|
||||
|
||||
@@ -15,6 +15,11 @@ CREATE VIEW iexit AS
|
||||
CREATE VIEW toyemp AS
|
||||
SELECT name, age, location, 12*salary AS annualsal
|
||||
FROM emp;
|
||||
-- Test comments
|
||||
COMMENT ON VIEW noview IS 'no view';
|
||||
ERROR: relation "noview" does not exist
|
||||
COMMENT ON VIEW toyemp IS 'is a view';
|
||||
COMMENT ON VIEW toyemp IS NULL;
|
||||
--
|
||||
-- CREATE OR REPLACE VIEW
|
||||
--
|
||||
|
||||
@@ -64,6 +64,11 @@ CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 text, PRIMARY KEY(ptest1,
|
||||
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "pktable_pkey" for table "pktable"
|
||||
CREATE TABLE FKTABLE ( ftest1 int, ftest2 int, ftest3 int, CONSTRAINT constrname FOREIGN KEY(ftest1, ftest2)
|
||||
REFERENCES PKTABLE MATCH FULL ON DELETE SET NULL ON UPDATE SET NULL);
|
||||
-- Test comments
|
||||
COMMENT ON CONSTRAINT constrname_wrong ON FKTABLE IS 'fk constraint comment';
|
||||
ERROR: constraint "constrname_wrong" for table "fktable" does not exist
|
||||
COMMENT ON CONSTRAINT constrname ON FKTABLE IS 'fk constraint comment';
|
||||
COMMENT ON CONSTRAINT constrname ON FKTABLE IS NULL;
|
||||
-- Insert test data into PKTABLE
|
||||
INSERT INTO PKTABLE VALUES (1, 2, 'Test1');
|
||||
INSERT INTO PKTABLE VALUES (1, 3, 'Test1-2');
|
||||
|
||||
@@ -264,6 +264,11 @@ begin
|
||||
return 0;
|
||||
end;
|
||||
' language 'plpgsql';
|
||||
-- Test comments
|
||||
COMMENT ON FUNCTION tg_hub_adjustslots_wrong(bpchar, integer, integer) IS 'function with args';
|
||||
ERROR: function tg_hub_adjustslots_wrong(character, integer, integer) does not exist
|
||||
COMMENT ON FUNCTION tg_hub_adjustslots(bpchar, integer, integer) IS 'function with args';
|
||||
COMMENT ON FUNCTION tg_hub_adjustslots(bpchar, integer, integer) IS NULL;
|
||||
-- ************************************************************
|
||||
-- * BEFORE INSERT or UPDATE on HSlot
|
||||
-- * - prevent from manual manipulation
|
||||
|
||||
@@ -17,6 +17,11 @@ create rule rtest_v1_upd as on update to rtest_v1 do instead
|
||||
where a = old.a;
|
||||
create rule rtest_v1_del as on delete to rtest_v1 do instead
|
||||
delete from rtest_t1 where a = old.a;
|
||||
-- Test comments
|
||||
COMMENT ON RULE rtest_v1_bad ON rtest_v1 IS 'bad rule';
|
||||
ERROR: rule "rtest_v1_bad" for relation "rtest_v1" does not exist
|
||||
COMMENT ON RULE rtest_v1_del ON rtest_v1 IS 'delete rule';
|
||||
COMMENT ON RULE rtest_v1_del ON rtest_v1 IS NULL;
|
||||
--
|
||||
-- Tables and rules for the constraint update/delete test
|
||||
--
|
||||
|
||||
@@ -71,3 +71,8 @@ SELECT nextval('sequence_test2');
|
||||
5
|
||||
(1 row)
|
||||
|
||||
-- Test comments
|
||||
COMMENT ON SEQUENCE asdf IS 'won''t work';
|
||||
ERROR: relation "asdf" does not exist
|
||||
COMMENT ON SEQUENCE sequence_test2 IS 'will work';
|
||||
COMMENT ON SEQUENCE sequence_test2 IS NULL;
|
||||
|
||||
@@ -37,6 +37,11 @@ create trigger check_fkeys2_pkey_exist
|
||||
for each row
|
||||
execute procedure
|
||||
check_primary_key ('fkey21', 'fkey22', 'pkeys', 'pkey1', 'pkey2');
|
||||
-- Test comments
|
||||
COMMENT ON TRIGGER check_fkeys2_pkey_bad ON fkeys2 IS 'wrong';
|
||||
ERROR: trigger "check_fkeys2_pkey_bad" for table "fkeys2" does not exist
|
||||
COMMENT ON TRIGGER check_fkeys2_pkey_exist ON fkeys2 IS 'right';
|
||||
COMMENT ON TRIGGER check_fkeys2_pkey_exist ON fkeys2 IS NULL;
|
||||
--
|
||||
-- For pkeys:
|
||||
-- ON DELETE/UPDATE (pkey1, pkey2) CASCADE:
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
|
||||
CREATE TABLE tmp (initial int4);
|
||||
|
||||
COMMENT ON TABLE tmp_wrong IS 'table comment';
|
||||
COMMENT ON TABLE tmp IS 'table comment';
|
||||
COMMENT ON TABLE tmp IS NULL;
|
||||
|
||||
ALTER TABLE tmp ADD COLUMN a int4;
|
||||
|
||||
ALTER TABLE tmp ADD COLUMN b name;
|
||||
|
||||
@@ -16,6 +16,10 @@ CREATE DEFAULT CONVERSION public.mydef FOR 'LATIN1' TO 'UNICODE' FROM iso8859_1_
|
||||
-- cannot make default conversion with same shcema/for_encoding/to_encoding
|
||||
--
|
||||
CREATE DEFAULT CONVERSION public.mydef2 FOR 'LATIN1' TO 'UNICODE' FROM iso8859_1_to_utf8;
|
||||
-- test comments
|
||||
COMMENT ON CONVERSION myconv_bad IS 'foo';
|
||||
COMMENT ON CONVERSION myconv IS 'bar';
|
||||
COMMENT ON CONVERSION myconv IS NULL;
|
||||
--
|
||||
-- drop user defined conversion
|
||||
--
|
||||
|
||||
@@ -9,6 +9,11 @@ CREATE AGGREGATE newavg (
|
||||
initcond1 = '{0,0,0}'
|
||||
);
|
||||
|
||||
-- test comments
|
||||
COMMENT ON AGGREGATE newavg_wrong (int4) IS 'an agg comment';
|
||||
COMMENT ON AGGREGATE newavg (int4) IS 'an agg comment';
|
||||
COMMENT ON AGGREGATE newavg (int4) IS NULL;
|
||||
|
||||
-- without finalfunc; test obsolete spellings 'sfunc1' etc
|
||||
CREATE AGGREGATE newsum (
|
||||
sfunc1 = int4pl, basetype = int4, stype1 = int4,
|
||||
@@ -21,3 +26,6 @@ CREATE AGGREGATE newcnt (
|
||||
initcond = '0'
|
||||
);
|
||||
|
||||
COMMENT ON AGGREGATE nosuchagg (*) IS 'should fail';
|
||||
COMMENT ON AGGREGATE newcnt (*) IS 'an any agg comment';
|
||||
COMMENT ON AGGREGATE newcnt (*) IS NULL;
|
||||
|
||||
@@ -32,6 +32,11 @@ CREATE INDEX iix ON ihighway USING btree (name text_ops);
|
||||
|
||||
CREATE INDEX six ON shighway USING btree (name text_ops);
|
||||
|
||||
-- test comments
|
||||
COMMENT ON INDEX six_wrong IS 'bad index';
|
||||
COMMENT ON INDEX six IS 'good index';
|
||||
COMMENT ON INDEX six IS NULL;
|
||||
|
||||
--
|
||||
-- BTREE ascending/descending cases
|
||||
--
|
||||
|
||||
@@ -32,3 +32,9 @@ CREATE OPERATOR #%# (
|
||||
procedure = int4fac
|
||||
);
|
||||
|
||||
-- Test comments
|
||||
COMMENT ON OPERATOR ###### (int4, NONE) IS 'bad right unary';
|
||||
COMMENT ON OPERATOR #%# (int4, NONE) IS 'right unary';
|
||||
COMMENT ON OPERATOR #%# (int4, NONE) IS NULL;
|
||||
|
||||
|
||||
|
||||
@@ -69,6 +69,11 @@ CREATE FUNCTION get_default_test() RETURNS SETOF default_test_row AS '
|
||||
|
||||
SELECT * FROM get_default_test();
|
||||
|
||||
-- Test comments
|
||||
COMMENT ON TYPE bad IS 'bad comment';
|
||||
COMMENT ON TYPE default_test_row IS 'good comment';
|
||||
COMMENT ON TYPE default_test_row IS NULL;
|
||||
|
||||
DROP TYPE default_test_row CASCADE;
|
||||
|
||||
DROP TABLE default_test;
|
||||
|
||||
@@ -19,6 +19,11 @@ CREATE VIEW toyemp AS
|
||||
SELECT name, age, location, 12*salary AS annualsal
|
||||
FROM emp;
|
||||
|
||||
-- Test comments
|
||||
COMMENT ON VIEW noview IS 'no view';
|
||||
COMMENT ON VIEW toyemp IS 'is a view';
|
||||
COMMENT ON VIEW toyemp IS NULL;
|
||||
|
||||
--
|
||||
-- CREATE OR REPLACE VIEW
|
||||
--
|
||||
|
||||
@@ -50,6 +50,11 @@ CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 text, PRIMARY KEY(ptest1,
|
||||
CREATE TABLE FKTABLE ( ftest1 int, ftest2 int, ftest3 int, CONSTRAINT constrname FOREIGN KEY(ftest1, ftest2)
|
||||
REFERENCES PKTABLE MATCH FULL ON DELETE SET NULL ON UPDATE SET NULL);
|
||||
|
||||
-- Test comments
|
||||
COMMENT ON CONSTRAINT constrname_wrong ON FKTABLE IS 'fk constraint comment';
|
||||
COMMENT ON CONSTRAINT constrname ON FKTABLE IS 'fk constraint comment';
|
||||
COMMENT ON CONSTRAINT constrname ON FKTABLE IS NULL;
|
||||
|
||||
-- Insert test data into PKTABLE
|
||||
INSERT INTO PKTABLE VALUES (1, 2, 'Test1');
|
||||
INSERT INTO PKTABLE VALUES (1, 3, 'Test1-2');
|
||||
|
||||
@@ -326,6 +326,10 @@ begin
|
||||
end;
|
||||
' language 'plpgsql';
|
||||
|
||||
-- Test comments
|
||||
COMMENT ON FUNCTION tg_hub_adjustslots_wrong(bpchar, integer, integer) IS 'function with args';
|
||||
COMMENT ON FUNCTION tg_hub_adjustslots(bpchar, integer, integer) IS 'function with args';
|
||||
COMMENT ON FUNCTION tg_hub_adjustslots(bpchar, integer, integer) IS NULL;
|
||||
|
||||
-- ************************************************************
|
||||
-- * BEFORE INSERT or UPDATE on HSlot
|
||||
@@ -1603,4 +1607,4 @@ END;' language 'plpgsql';
|
||||
SELECT perform_test_func();
|
||||
SELECT * FROM perform_test;
|
||||
|
||||
drop table perform_test;
|
||||
drop table perform_test;
|
||||
|
||||
@@ -19,7 +19,10 @@ create rule rtest_v1_upd as on update to rtest_v1 do instead
|
||||
where a = old.a;
|
||||
create rule rtest_v1_del as on delete to rtest_v1 do instead
|
||||
delete from rtest_t1 where a = old.a;
|
||||
|
||||
-- Test comments
|
||||
COMMENT ON RULE rtest_v1_bad ON rtest_v1 IS 'bad rule';
|
||||
COMMENT ON RULE rtest_v1_del ON rtest_v1 IS 'delete rule';
|
||||
COMMENT ON RULE rtest_v1_del ON rtest_v1 IS NULL;
|
||||
--
|
||||
-- Tables and rules for the constraint update/delete test
|
||||
--
|
||||
|
||||
@@ -37,3 +37,8 @@ SELECT nextval('sequence_test2');
|
||||
SELECT nextval('sequence_test2');
|
||||
SELECT nextval('sequence_test2');
|
||||
|
||||
-- Test comments
|
||||
COMMENT ON SEQUENCE asdf IS 'won''t work';
|
||||
COMMENT ON SEQUENCE sequence_test2 IS 'will work';
|
||||
COMMENT ON SEQUENCE sequence_test2 IS NULL;
|
||||
|
||||
|
||||
@@ -44,6 +44,11 @@ create trigger check_fkeys2_pkey_exist
|
||||
execute procedure
|
||||
check_primary_key ('fkey21', 'fkey22', 'pkeys', 'pkey1', 'pkey2');
|
||||
|
||||
-- Test comments
|
||||
COMMENT ON TRIGGER check_fkeys2_pkey_bad ON fkeys2 IS 'wrong';
|
||||
COMMENT ON TRIGGER check_fkeys2_pkey_exist ON fkeys2 IS 'right';
|
||||
COMMENT ON TRIGGER check_fkeys2_pkey_exist ON fkeys2 IS NULL;
|
||||
|
||||
--
|
||||
-- For pkeys:
|
||||
-- ON DELETE/UPDATE (pkey1, pkey2) CASCADE:
|
||||
|
||||
Reference in New Issue
Block a user