Skip to content

Commit 16cf215

Browse files
committed
autonomous_cloud_import
1 parent c639989 commit 16cf215

6 files changed

Lines changed: 232 additions & 0 deletions

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
CREATE OR REPLACE VIEW ALL_PART_KEY_COLUMNS AS
2+
WITH part_tables AS (
3+
-- one row per partitioned table
4+
SELECT DISTINCT
5+
TABLE_SCHEMA,
6+
TABLE_NAME,
7+
PARTITION_EXPRESSION
8+
FROM information_schema.PARTITIONS
9+
WHERE PARTITION_NAME IS NOT NULL
10+
AND PARTITION_EXPRESSION IS NOT NULL
11+
),
12+
key_list AS (
13+
SELECT
14+
TABLE_SCHEMA AS OWNER,
15+
TABLE_NAME AS NAME,
16+
17+
-- extract text inside parentheses
18+
TRIM(
19+
BOTH ')'
20+
FROM TRIM(
21+
BOTH '('
22+
FROM SUBSTRING_INDEX(PARTITION_EXPRESSION, '(', -1)
23+
)
24+
) AS key_list
25+
FROM part_tables
26+
)
27+
SELECT
28+
k.OWNER,
29+
k.NAME,
30+
'TABLE' AS OBJECT_TYPE,
31+
TRIM(BOTH '`' FROM
32+
SUBSTRING_INDEX(
33+
SUBSTRING_INDEX(k.key_list, ',', n.n),
34+
',', -1
35+
)
36+
) AS COLUMN_NAME,
37+
n.n AS COLUMN_POSITION
38+
FROM key_list k
39+
JOIN (
40+
SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL
41+
SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL
42+
SELECT 7 UNION ALL SELECT 8
43+
) n
44+
ON n.n <= 1 + LENGTH(k.key_list) - LENGTH(REPLACE(k.key_list, ',', ''))
45+
-- exclude expression-based partitions
46+
WHERE k.key_list NOT REGEXP '[()]'
47+
ORDER BY
48+
k.OWNER,
49+
k.NAME,
50+
COLUMN_POSITION;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
CREATE VIEW ALL_PART_TABLES AS
2+
SELECT
3+
TABLE_SCHEMA AS OWNER,
4+
TABLE_NAME,
5+
PARTITION_METHOD AS PARTITIONING_TYPE,
6+
COUNT(DISTINCT PARTITION_NAME) AS PARTITION_COUNT,
7+
LENGTH(PARTITION_EXPRESSION) - LENGTH(REPLACE(PARTITION_EXPRESSION, ',', '')) + 1 AS PARTITIONING_KEY_COUNT
8+
FROM
9+
information_schema.partitions
10+
GROUP BY
11+
TABLE_SCHEMA,
12+
TABLE_NAME,
13+
PARTITION_METHOD,
14+
PARTITION_EXPRESSION;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
CREATE OR REPLACE VIEW ALL_TAB_PARTITIONS AS
2+
SELECT
3+
TABLE_SCHEMA AS TABLE_OWNER,
4+
TABLE_NAME,
5+
PARTITION_NAME,
6+
7+
MIN(PARTITION_ORDINAL_POSITION) AS PARTITION_POSITION,
8+
9+
CASE
10+
WHEN MAX(PARTITION_DESCRIPTION) = 'MAXVALUE'
11+
THEN 'MAXVALUE'
12+
ELSE TRIM(BOTH '''' FROM MAX(PARTITION_DESCRIPTION))
13+
END AS HIGH_VALUE,
14+
15+
LENGTH(
16+
CASE
17+
WHEN MAX(PARTITION_DESCRIPTION) = 'MAXVALUE'
18+
THEN 'MAXVALUE'
19+
ELSE TRIM(BOTH '''' FROM MAX(PARTITION_DESCRIPTION))
20+
END
21+
) AS HIGH_VALUE_LENGTH,
22+
23+
MAX(PARTITION_METHOD) AS PARTITIONING_TYPE,
24+
25+
1 AS PARTITION_KEY_COUNT
26+
27+
FROM information_schema.PARTITIONS
28+
WHERE PARTITION_NAME IS NOT NULL
29+
GROUP BY
30+
TABLE_SCHEMA,
31+
TABLE_NAME,
32+
PARTITION_NAME;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
CREATE OR REPLACE VIEW "ALL_PART_KEY_COLUMNS" AS
2+
SELECT
3+
ns.nspname AS "OWNER",
4+
c.relname AS "NAME",
5+
'TABLE' AS "OBJECT_TYPE",
6+
a.attname AS "COLUMN_NAME",
7+
ord.ordinality AS "COLUMN_POSITION"
8+
9+
FROM pg_partitioned_table pt
10+
JOIN pg_class c
11+
ON c.oid = pt.partrelid
12+
JOIN pg_namespace ns
13+
ON ns.oid = c.relnamespace
14+
15+
-- explode partition key column numbers
16+
JOIN LATERAL unnest(pt.partattrs)
17+
WITH ORDINALITY AS ord(attnum, ordinality)
18+
ON true
19+
20+
JOIN pg_attribute a
21+
ON a.attrelid = c.oid
22+
AND a.attnum = ord.attnum
23+
24+
ORDER BY
25+
"OWNER",
26+
"NAME",
27+
"COLUMN_POSITION";
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
CREATE OR REPLACE VIEW "ALL_PART_TABLES" AS
2+
WITH "PARTITION_DETAILS" AS (
3+
SELECT
4+
parent_ns.nspname AS "OWNER",
5+
parent.relname AS "TABLE_NAME",
6+
parent.oid AS "PARENT_OID",
7+
count(child.oid) AS "PARTITION_COUNT", -- Count partitions
8+
pg_partitioned_table.partstrat AS "PARTSTRAT", -- Partition strategy (RANGE, LIST, HASH)
9+
pg_partitioned_table.partattrs AS "PARTITION_COLUMNS" -- Column numbers involved in partitioning
10+
FROM
11+
pg_inherits i
12+
JOIN pg_class child ON child.oid = i.inhrelid
13+
JOIN pg_class parent ON parent.oid = i.inhparent
14+
JOIN pg_namespace parent_ns ON parent.relnamespace = parent_ns.oid
15+
JOIN pg_partitioned_table ON parent.oid = pg_partitioned_table.partrelid
16+
WHERE
17+
parent.relkind = 'p' -- Only partitioned tables
18+
GROUP BY
19+
parent_ns.nspname, parent.relname, parent.oid, pg_partitioned_table.partstrat, pg_partitioned_table.partattrs
20+
),
21+
"PARTITIONING_KEYS" AS (
22+
SELECT
23+
ppt.partrelid AS "PARENT_OID",
24+
-- Count the number of partitioning columns by counting entries in partattrs
25+
array_length(ppt.partattrs, 1) AS "PARTITIONING_KEY_COUNT"
26+
FROM
27+
pg_partitioned_table ppt
28+
WHERE
29+
ppt.partattrs IS NOT NULL -- Only count if there are partition columns
30+
)
31+
SELECT
32+
pd."OWNER",
33+
pd."TABLE_NAME",
34+
pd."PARTITION_COUNT",
35+
pk."PARTITIONING_KEY_COUNT",
36+
CASE
37+
WHEN pd."PARTSTRAT" = 'r' THEN 'RANGE'
38+
WHEN pd."PARTSTRAT" = 'l' THEN 'LIST'
39+
WHEN pd."PARTSTRAT" = 'h' THEN 'HASH'
40+
ELSE 'UNKNOWN'
41+
END AS "PARTITIONING_TYPE"
42+
FROM
43+
"PARTITION_DETAILS" pd
44+
JOIN
45+
"PARTITIONING_KEYS" pk ON pd."PARENT_OID" = pk."PARENT_OID"
46+
ORDER BY
47+
pd."OWNER", pd."TABLE_NAME";
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
CREATE OR REPLACE VIEW "ALL_TAB_PARTITIONS" AS
2+
SELECT
3+
ns.nspname AS "TABLE_OWNER",
4+
parent.relname AS "TABLE_NAME",
5+
child.relname AS "PARTITION_NAME",
6+
7+
-- Oracle-style partition position
8+
ROW_NUMBER() OVER (
9+
PARTITION BY parent.oid
10+
ORDER BY child.oid
11+
) AS "PARTITION_POSITION",
12+
13+
-- Oracle-style HIGH_VALUE (upper bound only, no quotes)
14+
CASE
15+
WHEN pg_get_expr(child.relpartbound, child.oid) ~ 'TO \(MAXVALUE\)'
16+
THEN 'MAXVALUE'
17+
ELSE trim(
18+
BOTH ''''
19+
FROM regexp_replace(
20+
pg_get_expr(child.relpartbound, child.oid),
21+
'.*TO \((.*)\)$',
22+
'\1'
23+
)
24+
)
25+
END AS "HIGH_VALUE",
26+
27+
-- Length of HIGH_VALUE (Oracle compatibility)
28+
LENGTH(
29+
CASE
30+
WHEN pg_get_expr(child.relpartbound, child.oid) ~ 'TO \(MAXVALUE\)'
31+
THEN 'MAXVALUE'
32+
ELSE trim(
33+
BOTH ''''
34+
FROM regexp_replace(
35+
pg_get_expr(child.relpartbound, child.oid),
36+
'.*TO \((.*)\)$',
37+
'\1'
38+
)
39+
)
40+
END
41+
) AS "HIGH_VALUE_LENGTH",
42+
43+
-- Partitioning type (Oracle naming)
44+
CASE pt.partstrat
45+
WHEN 'r' THEN 'RANGE'
46+
WHEN 'l' THEN 'LIST'
47+
WHEN 'h' THEN 'HASH'
48+
END AS "PARTITIONING_TYPE",
49+
50+
-- Number of partition key columns
51+
pt.partnatts AS "PARTITION_KEY_COUNT"
52+
53+
FROM pg_inherits i
54+
JOIN pg_class parent
55+
ON parent.oid = i.inhparent
56+
JOIN pg_class child
57+
ON child.oid = i.inhrelid
58+
JOIN pg_namespace ns
59+
ON ns.oid = parent.relnamespace
60+
JOIN pg_partitioned_table pt
61+
ON pt.partrelid = parent.oid
62+
WHERE parent.relkind = 'p';

0 commit comments

Comments
 (0)