Skip to content

Commit a00431b

Browse files
committed
"Information_schema" changes
- Add domain check constraints to "check_constraints" view - Create "domains" view - Create "domain_constraints" view -- Rod Taylor <rbt@rbt.ca>
1 parent 54ca7a7 commit a00431b

File tree

1 file changed

+132
-4
lines changed

1 file changed

+132
-4
lines changed

src/backend/catalog/information_schema.sql

Lines changed: 132 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*
55
* Copyright 2002, PostgreSQL Global Development Group
66
*
7-
* $Id: information_schema.sql,v 1.3 2003/01/15 23:37:27 petere Exp $
7+
* $Id: information_schema.sql,v 1.4 2003/03/20 05:06:55 momjian Exp $
88
*/
99

1010

@@ -76,9 +76,13 @@ CREATE VIEW check_constraints AS
7676
CAST(rs.nspname AS sql_identifier) AS constraint_schema,
7777
CAST(con.conname AS sql_identifier) AS constraint_name,
7878
CAST(con.consrc AS character_data) AS check_clause
79-
FROM pg_namespace rs, pg_class c, pg_constraint con, pg_user u
80-
WHERE rs.oid = c.relnamespace AND c.oid = con.conrelid
81-
AND c.relowner = u.usesysid AND u.usename = current_user
79+
FROM pg_namespace rs, pg_constraint con
80+
left outer join pg_class c on (c.oid = con.conrelid)
81+
left outer join pg_type t on (t.oid = con.contypid),
82+
pg_user u
83+
WHERE rs.oid = con.connamespace
84+
AND u.usesysid IN (c.relowner, t.typowner)
85+
AND u.usename = current_user
8286
AND con.contype = 'c';
8387

8488
GRANT SELECT ON check_constraints TO PUBLIC;
@@ -236,6 +240,130 @@ CREATE VIEW columns AS
236240
GRANT SELECT ON columns TO PUBLIC;
237241

238242

243+
/*
244+
* 20.24
245+
* DOMAIN_CONSTRAINTS view
246+
*/
247+
248+
CREATE VIEW domain_constraints AS
249+
SELECT CAST(current_database() AS sql_identifier) AS constraint_catalog,
250+
CAST(rs.nspname AS sql_identifier) AS constraint_schema,
251+
CAST(con.conname AS sql_identifier) AS constraint_name,
252+
CAST(current_database() AS sql_identifier) AS domain_catalog,
253+
CAST(n.nspname AS sql_identifier) AS domain_schema,
254+
CAST(t.typname AS sql_identifier) AS domain_name,
255+
CAST(CASE WHEN condeferrable THEN 'YES' ELSE 'NO' END
256+
AS character_data) AS is_deferrable,
257+
CAST(CASE WHEN condeferred THEN 'YES' ELSE 'NO' END
258+
AS character_data) AS initially_deferred
259+
FROM pg_namespace rs, pg_namespace n, pg_constraint con, pg_type t, pg_user u
260+
WHERE rs.oid = con.connamespace
261+
AND n.oid = t.typnamespace
262+
AND u.usesysid = t.typowner
263+
AND u.usename = current_user
264+
AND t.oid = con.contypid;
265+
266+
GRANT SELECT ON domain_constraints TO PUBLIC;
267+
268+
269+
/*
270+
* 20.26
271+
* DOMAINS view
272+
*/
273+
274+
CREATE VIEW domains AS
275+
SELECT CAST(current_database() AS sql_identifier) AS domain_catalog,
276+
CAST(rs.nspname AS sql_identifier) AS domain_schema,
277+
CAST(t.typname AS sql_identifier) AS domain_name,
278+
CAST(format_type(t.typbasetype, null) AS character_data)
279+
AS data_type,
280+
281+
CAST(
282+
CASE WHEN t.typbasetype IN (25, 1042, 1043, 1560, 1562) AND t.typtypmod <> -1
283+
THEN t.typtypmod - 4
284+
ELSE null END
285+
AS cardinal_number)
286+
AS character_maximum_length,
287+
288+
CAST(
289+
CASE WHEN t.typbasetype IN (25, 1042, 1043) THEN 2^30 ELSE null END
290+
AS cardinal_number)
291+
AS character_octet_length,
292+
CAST(null AS sql_identifier) AS character_set_catalog,
293+
CAST(null AS sql_identifier) AS character_set_schema,
294+
CAST(null AS sql_identifier) AS character_set_name,
295+
296+
CAST(null AS sql_identifier) AS collation_catalog,
297+
CAST(null AS sql_identifier) AS collation_schema,
298+
CAST(null AS sql_identifier) AS collation_name,
299+
300+
CAST(
301+
CASE WHEN t.typbasetype IN (1700) THEN ((t.typtypmod - 4) >> 16) & 65535 ELSE null END
302+
AS cardinal_number)
303+
AS numeric_precision,
304+
305+
CAST(
306+
CASE WHEN t.typbasetype IN (1700) THEN 10 ELSE null END
307+
AS cardinal_number)
308+
AS numeric_precision_radix,
309+
310+
CAST(
311+
CASE WHEN t.typbasetype IN (1700) THEN (t.typtypmod - 4) & 65535 ELSE null END
312+
AS cardinal_number)
313+
AS numeric_scale,
314+
315+
CAST(
316+
CASE WHEN t.typbasetype IN (1083, 1114, 1184, 1266)
317+
THEN (CASE WHEN t.typtypmod <> -1 THEN t.typtypmod ELSE null END)
318+
WHEN t.typbasetype IN (1186)
319+
THEN (CASE WHEN t.typtypmod <> -1 THEN t.typtypmod & 65535 ELSE null END)
320+
ELSE null END
321+
AS cardinal_number)
322+
AS datetime_precision,
323+
324+
CAST(null AS character_data) AS interval_type, -- XXX
325+
CAST(null AS character_data) AS interval_precision, -- XXX
326+
327+
CAST(typdefault AS character_data) AS domain_default,
328+
329+
CAST(CASE WHEN t.typbasetype = 0 THEN current_database() ELSE null END
330+
AS sql_identifier) AS udt_catalog,
331+
CAST(CASE WHEN t.typbasetype = 0 THEN rs.nspname ELSE null END
332+
AS sql_identifier) AS udt_schema,
333+
CAST(CASE WHEN t.typbasetype = 0 THEN t.typname ELSE null END
334+
AS sql_identifier) AS udt_name,
335+
336+
CAST(null AS sql_identifier) AS scope_catalog,
337+
CAST(null AS sql_identifier) AS scope_schema,
338+
CAST(null AS sql_identifier) AS scope_name,
339+
340+
CAST(null AS cardinal_number) AS maximum_cardinality,
341+
CAST(null AS sql_identifier) AS dtd_identifier
342+
343+
FROM pg_namespace rs,
344+
pg_type t,
345+
pg_user u
346+
347+
WHERE rs.oid = t.typnamespace
348+
AND t.typtype = 'd'
349+
AND t.typowner = u.usesysid
350+
AND (u.usename = CURRENT_USER
351+
OR EXISTS (SELECT 1
352+
FROM pg_user AS u2
353+
WHERE rs.nspowner = u2.usesysid
354+
AND u2.usename = CURRENT_USER)
355+
OR EXISTS (SELECT 1
356+
FROM pg_user AS u3,
357+
pg_attribute AS a3,
358+
pg_class AS c3
359+
WHERE u3.usesysid = c3.relowner
360+
AND a3.attrelid = c3.oid
361+
AND a3.atttypid = t.oid));
362+
363+
364+
GRANT SELECT ON domains TO PUBLIC;
365+
366+
239367
/*
240368
* 20.35
241369
* REFERENTIAL_CONSTRAINTS view

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy