-- Clean up in case a prior regression run failed SET client_min_messages TO'warning'; DROP ROLE IFEXISTS regress_addr_user;
RESET client_min_messages;
CREATE USER regress_addr_user;
-- Test generic object addressing/identification functions CREATESCHEMA addr_nsp; SET search_path TO'addr_nsp'; CREATEFOREIGN DATA WRAPPER addr_fdw; CREATE SERVER addr_fserv FOREIGN DATA WRAPPER addr_fdw; CREATE TEXT SEARCH DICTIONARY addr_ts_dict (template=simple); CREATE TEXT SEARCH CONFIGURATION addr_ts_conf (copy=english); CREATE TEXT SEARCH TEMPLATE addr_ts_temp (lexize=dsimple_lexize); CREATE TEXT SEARCH PARSER addr_ts_prs
(start = prsd_start, gettoken = prsd_nexttoken, end = prsd_end, lextypes = prsd_lextype); CREATETABLE addr_nsp.gentable (
a serial primarykeyCONSTRAINT a_chk CHECK (a > 0),
b text DEFAULT'hello'
); CREATETABLE addr_nsp.parttable (
a intPRIMARYKEY
) PARTITION BY RANGE (a); CREATE VIEW addr_nsp.genview ASSELECT * from addr_nsp.gentable; CREATE MATERIALIZED VIEW addr_nsp.genmatview ASSELECT * FROM addr_nsp.gentable; CREATE TYPE addr_nsp.gencomptype AS (a int); CREATE TYPE addr_nsp.genenum AS ENUM ('one', 'two'); CREATEFOREIGNTABLE addr_nsp.genftable (a int) SERVER addr_fserv; CREATE AGGREGATE addr_nsp.genaggr(int4) (sfunc = int4pl, stype = int4); CREATE DOMAIN addr_nsp.gendomain ASint4CONSTRAINT domconstr CHECK (value > 0); CREATE FUNCTION addr_nsp.trig() RETURNS TRIGGER LANGUAGE plpgsql AS $$ BEGIN END; $$; CREATETRIGGER t BEFOREINSERTON addr_nsp.gentable FOREACH ROW EXECUTE PROCEDURE addr_nsp.trig(); CREATE POLICY genpol ON addr_nsp.gentable; CREATEPROCEDURE addr_nsp.proc(int4) LANGUAGE SQLAS $$ $$; CREATE SERVER "integer"FOREIGN DATA WRAPPER addr_fdw; CREATE USER MAPPING FOR regress_addr_user SERVER "integer"; ALTERDEFAULT PRIVILEGES FOR ROLE regress_addr_user INSCHEMA public GRANTALLON TABLES TO regress_addr_user; ALTERDEFAULT PRIVILEGES FOR ROLE regress_addr_user REVOKEDELETEON TABLES FROM regress_addr_user; -- this transform would be quite unsafe to leave lying around, -- except that the SQL language pays no attention to transforms: CREATE TRANSFORM FORint LANGUAGE SQL ( FROMSQLWITH FUNCTION prsd_lextype(internal), TOSQLWITH FUNCTION int4recv(internal)); -- suppress warning that depends on wal_level SET client_min_messages = 'ERROR'; CREATE PUBLICATION addr_pub FORTABLE addr_nsp.gentable; CREATE PUBLICATION addr_pub_schema FOR TABLES INSCHEMA addr_nsp;
RESET client_min_messages; CREATE SUBSCRIPTION regress_addr_sub CONNECTION'' PUBLICATION bar WITH (connect = false, slot_name = NONE); CREATE STATISTICS addr_nsp.gentable_stat ON a, b FROM addr_nsp.gentable;
-- test some error cases SELECT pg_get_object_address('stone', '{}', '{}'); SELECT pg_get_object_address('table', '{}', '{}'); SELECT pg_get_object_address('table', '{NULL}', '{}');
-- unrecognized object types
DO $$ DECLARE
objtype text;
BEGIN FOR objtype INVALUES ('toast table'), ('index column'), ('sequence column'),
('toast table column'), ('view column'), ('materialized view column') LOOP
BEGIN
PERFORM pg_get_object_address(objtype, '{one}', '{}');
EXCEPTION WHEN invalid_parameter_value THEN
RAISE WARNING 'error for %: %', objtype, sqlerrm;
END;
END LOOP;
END;
$$;
-- miscellaneous other errors select * from pg_get_object_address('operator of access method', '{btree,integer_ops,1}', '{int4,bool}'); select * from pg_get_object_address('operator of access method', '{btree,integer_ops,99}', '{int4,int4}'); select * from pg_get_object_address('function of access method', '{btree,integer_ops,1}', '{int4,bool}'); select * from pg_get_object_address('function of access method', '{btree,integer_ops,99}', '{int4,int4}');
DO $$ DECLARE
objtype text;
names text[];
args text[];
BEGIN FOR objtype INVALUES
('table'), ('index'), ('sequence'), ('view'),
('materialized view'), ('foreign table'),
('table column'), ('foreign table column'),
('aggregate'), ('function'), ('procedure'), ('type'), ('cast'),
('table constraint'), ('domain constraint'), ('conversion'), ('default value'),
('operator'), ('operator class'), ('operator family'), ('rule'), ('trigger'),
('text search parser'), ('text search dictionary'),
('text search template'), ('text search configuration'),
('policy'), ('user mapping'), ('default acl'), ('transform'),
('operator of access method'), ('function of access method'),
('publication namespace'), ('publication relation') LOOP FOR names INVALUES ('{eins}'), ('{addr_nsp, zwei}'), ('{eins, zwei, drei}') LOOP FOR args INVALUES ('{}'), ('{integer}') LOOP
BEGIN
PERFORM pg_get_object_address(objtype, names, args);
EXCEPTION WHEN OTHERS THEN
RAISE WARNING 'error for %,%,%: %', objtype, names, args, sqlerrm;
END;
END LOOP;
END LOOP;
END LOOP;
END;
$$;
--- --- Cleanup resources --- DROPFOREIGN DATA WRAPPER addr_fdw CASCADE; DROP PUBLICATION addr_pub; DROP PUBLICATION addr_pub_schema; DROP SUBSCRIPTION regress_addr_sub;
DROPSCHEMA addr_nsp CASCADE;
DROP OWNED BY regress_addr_user; DROP USER regress_addr_user;
-- -- Checks for invalid objects --
-- Keep this list in the same order as getObjectIdentityParts() -- in objectaddress.c. WITH objects (classid, objid, objsubid) AS (VALUES
('pg_class'::regclass, 0, 0), -- no relation
('pg_class'::regclass, 'pg_class'::regclass, 100), -- no column for relation
('pg_proc'::regclass, 0, 0), -- no function
('pg_type'::regclass, 0, 0), -- no type
('pg_cast'::regclass, 0, 0), -- no cast
('pg_collation'::regclass, 0, 0), -- no collation
('pg_constraint'::regclass, 0, 0), -- no constraint
('pg_conversion'::regclass, 0, 0), -- no conversion
('pg_attrdef'::regclass, 0, 0), -- no default attribute
('pg_language'::regclass, 0, 0), -- no language
('pg_largeobject'::regclass, 0, 0), -- no large object, no error
('pg_operator'::regclass, 0, 0), -- no operator
('pg_opclass'::regclass, 0, 0), -- no opclass, no need to check for no access method
('pg_opfamily'::regclass, 0, 0), -- no opfamily
('pg_am'::regclass, 0, 0), -- no access method
('pg_amop'::regclass, 0, 0), -- no AM operator
('pg_amproc'::regclass, 0, 0), -- no AM proc
('pg_rewrite'::regclass, 0, 0), -- no rewrite
('pg_trigger'::regclass, 0, 0), -- no trigger
('pg_namespace'::regclass, 0, 0), -- no schema
('pg_statistic_ext'::regclass, 0, 0), -- no statistics
('pg_ts_parser'::regclass, 0, 0), -- no TS parser
('pg_ts_dict'::regclass, 0, 0), -- no TS dictionary
('pg_ts_template'::regclass, 0, 0), -- no TS template
('pg_ts_config'::regclass, 0, 0), -- no TS configuration
('pg_authid'::regclass, 0, 0), -- no role
('pg_auth_members'::regclass, 0, 0), -- no role membership
('pg_database'::regclass, 0, 0), -- no database
('pg_tablespace'::regclass, 0, 0), -- no tablespace
('pg_foreign_data_wrapper'::regclass, 0, 0), -- no FDW
('pg_foreign_server'::regclass, 0, 0), -- no server
('pg_user_mapping'::regclass, 0, 0), -- no user mapping
('pg_default_acl'::regclass, 0, 0), -- no default ACL
('pg_extension'::regclass, 0, 0), -- no extension
('pg_event_trigger'::regclass, 0, 0), -- no event trigger
('pg_parameter_acl'::regclass, 0, 0), -- no parameter ACL
('pg_policy'::regclass, 0, 0), -- no policy
('pg_publication'::regclass, 0, 0), -- no publication
('pg_publication_namespace'::regclass, 0, 0), -- no publication namespace
('pg_publication_rel'::regclass, 0, 0), -- no publication relation
('pg_subscription'::regclass, 0, 0), -- no subscription
('pg_transform'::regclass, 0, 0) -- no transformation
) SELECT ROW(pg_identify_object(objects.classid, objects.objid, objects.objsubid)) AS ident,
ROW(pg_identify_object_as_address(objects.classid, objects.objid, objects.objsubid)) AS addr,
pg_describe_object(objects.classid, objects.objid, objects.objsubid) AS descr FROM objects ORDERBY objects.classid, objects.objid, objects.objsubid;
-- restore normal output mode
\a\t
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-08-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.