prostgles-server 4.1.2 → 4.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DboBuilder/getTablesForSchemaPostgresSQL.js +127 -127
- package/dist/DboBuilder/getTablesForSchemaPostgresSQL.js.map +1 -1
- package/lib/DboBuilder/getTablesForSchemaPostgresSQL.ts +127 -127
- package/package.json +1 -1
- package/tests/client/PID.txt +1 -1
- package/tests/server/package-lock.json +1 -1
|
@@ -6,135 +6,135 @@ const PubSubManager_1 = require("../PubSubManager/PubSubManager");
|
|
|
6
6
|
async function getTablesForSchemaPostgresSQL({ db, runSQL }, schema = "public") {
|
|
7
7
|
const query = `
|
|
8
8
|
SELECT
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
9
|
+
jsonb_build_object(
|
|
10
|
+
'insert', TRUE,
|
|
11
|
+
'select', TRUE,
|
|
12
|
+
'update', TRUE,
|
|
13
|
+
'delete', EXISTS (
|
|
14
|
+
SELECT 1
|
|
15
|
+
FROM information_schema.role_table_grants rg
|
|
16
|
+
WHERE rg.table_name = t.table_name
|
|
17
|
+
AND rg.privilege_type = 'DELETE'
|
|
18
|
+
)
|
|
19
|
+
) as privileges
|
|
20
|
+
, t.table_schema as schema, t.table_name as name
|
|
21
|
+
, COALESCE(cc.columns, '[]'::JSONB) as columns
|
|
22
|
+
, t.oid
|
|
23
|
+
, t.is_view
|
|
24
|
+
, t.view_definition
|
|
25
|
+
, array_to_json(vr.table_names) as parent_tables
|
|
26
|
+
, obj_description(t.oid::regclass) as comment
|
|
27
|
+
FROM (
|
|
28
|
+
SELECT table_name,
|
|
29
|
+
table_schema,
|
|
30
|
+
oid,
|
|
31
|
+
is_view,
|
|
32
|
+
CASE WHEN is_view THEN pg_get_viewdef(format('%I.%I', table_schema, table_name)::REGCLASS, true) END as view_definition
|
|
33
|
+
FROM (
|
|
34
|
+
SELECT table_name, table_schema, table_type = 'VIEW' as is_view, regclass(table_schema || '.' || table_name)::oid as oid
|
|
35
|
+
FROM information_schema.tables
|
|
35
36
|
/* TODO - add support for materialized views
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
UNION ALL
|
|
38
|
+
SELECT table_name, table_schema
|
|
39
|
+
FROM (
|
|
40
|
+
SELECT relname as table_name, nspname as table_schema, true as is_view
|
|
41
|
+
FROM pg_catalog.pg_class AS _c
|
|
42
|
+
JOIN pg_catalog.pg_namespace AS _ns
|
|
43
|
+
ON _c.relnamespace = _ns.oid
|
|
44
|
+
WHERE relkind IN ( 'm' )
|
|
45
|
+
) materialized_views
|
|
45
46
|
*/
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
47
|
+
) tables_matviews
|
|
48
|
+
WHERE table_schema = ${(0, PubSubManager_1.asValue)(schema)}
|
|
49
|
+
) t
|
|
50
|
+
LEFT join (
|
|
51
|
+
SELECT table_schema, table_name
|
|
52
|
+
, jsonb_agg((SELECT x FROM (
|
|
53
|
+
SELECT ccc.column_name as name,
|
|
54
|
+
ccc.data_type,
|
|
55
|
+
ccc.udt_name,
|
|
56
|
+
ccc.element_type,
|
|
57
|
+
ccc.element_udt_name,
|
|
58
|
+
ccc.is_pkey,
|
|
59
|
+
ccc.comment,
|
|
60
|
+
ccc.ordinal_position,
|
|
61
|
+
ccc.is_nullable = 'YES' as is_nullable,
|
|
62
|
+
ccc.is_updatable,
|
|
63
|
+
ccc.references,
|
|
64
|
+
ccc.has_default,
|
|
65
|
+
ccc.column_default,
|
|
66
|
+
COALESCE(ccc.privileges, '[]'::JSON) as privileges
|
|
67
|
+
) as x) ORDER BY ccc.ordinal_position ) as columns
|
|
68
|
+
FROM (
|
|
69
|
+
SELECT c.table_schema, c.table_name, c.column_name, c.data_type, c.udt_name
|
|
70
|
+
, e.data_type as element_type
|
|
71
|
+
, e.udt_name as element_udt_name
|
|
72
|
+
, col_description(format('%I.%I', c.table_schema, c.table_name)::regclass::oid, c.ordinal_position) as comment
|
|
73
|
+
--, CASE WHEN fc.ftable IS NOT NULL THEN row_to_json((SELECT t FROM (SELECT fc.ftable, fc.fcols, fc.cols) t)) END as references
|
|
74
|
+
, fc.references
|
|
75
|
+
, c.is_identity = 'YES' OR EXISTS (
|
|
76
|
+
SELECT 1
|
|
77
|
+
FROM information_schema.table_constraints as tc
|
|
78
|
+
JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
79
|
+
WHERE kcu.table_schema = c.table_schema AND kcu.table_name = c.table_name AND kcu.column_name = c.column_name AND tc.constraint_type IN ('PRIMARY KEY')
|
|
80
|
+
) as is_pkey
|
|
81
|
+
, c.ordinal_position
|
|
82
|
+
, COALESCE(c.column_default IS NOT NULL OR c.identity_generation = 'ALWAYS', false) as has_default
|
|
83
|
+
, c.column_default
|
|
84
|
+
, format('%I.%I', c.table_schema, c.table_name)::regclass::oid AS table_oid
|
|
85
|
+
, c.is_nullable
|
|
86
|
+
/* generated always and view columns cannot be updated */
|
|
87
|
+
, COALESCE(c.is_updatable, 'YES') = 'YES' AND COALESCE(c.is_generated, '') != 'ALWAYS' AND COALESCE(c.identity_generation, '') != 'ALWAYS' as is_updatable
|
|
88
|
+
, cp.privileges
|
|
89
|
+
FROM information_schema.columns c
|
|
90
|
+
LEFT JOIN (SELECT * FROM information_schema.element_types ) e
|
|
91
|
+
ON ((c.table_catalog, c.table_schema, c.table_name, 'TABLE', c.dtd_identifier)
|
|
92
|
+
= (e.object_catalog, e.object_schema, e.object_name, e.object_type, e.collection_type_identifier)
|
|
93
|
+
)
|
|
94
|
+
LEFT JOIN (
|
|
95
|
+
SELECT table_schema, table_name, column_name, json_agg(row_to_json((SELECT t FROM (SELECT cpp.privilege_type, cpp.is_grantable ) t))) as privileges
|
|
96
|
+
FROM information_schema.column_privileges cpp
|
|
97
|
+
GROUP BY table_schema, table_name, column_name
|
|
98
|
+
) cp
|
|
99
|
+
ON c.table_name = cp.table_name AND c.column_name = cp.column_name
|
|
100
|
+
LEFT JOIN (
|
|
101
|
+
--SELECT *
|
|
102
|
+
SELECT "table", unnest(ft.cols) as col, jsonb_agg(row_to_json((SELECT t FROM (SELECT ftable, fcols, cols) t))) as references
|
|
103
|
+
FROM (
|
|
104
|
+
SELECT
|
|
105
|
+
(SELECT r.relname from pg_class r where r.oid = c.conrelid) as table,
|
|
106
|
+
(SELECT array_agg(attname::text) from pg_attribute
|
|
107
|
+
where attrelid = c.conrelid and ARRAY[attnum] <@ c.conkey) as cols,
|
|
108
|
+
(SELECT array_agg(attname::text) from pg_attribute
|
|
109
|
+
where attrelid = c.confrelid and ARRAY[attnum] <@ c.confkey) as fcols,
|
|
110
|
+
(SELECT r.relname from pg_class r where r.oid = c.confrelid) as ftable
|
|
111
|
+
FROM pg_constraint c
|
|
112
|
+
) ft
|
|
113
|
+
WHERE ft.table IS NOT NULL
|
|
114
|
+
AND ft.ftable IS NOT NULL
|
|
115
|
+
-- c.confrelid = 'users'::regclass::oid
|
|
116
|
+
GROUP BY "table", unnest(cols)
|
|
117
|
+
) fc
|
|
118
|
+
ON fc.table = c.table_name
|
|
119
|
+
AND c.column_name::text = fc.col
|
|
120
|
+
) ccc
|
|
121
|
+
GROUP BY table_schema, table_name
|
|
122
|
+
) cc
|
|
123
|
+
ON t.table_name = cc.table_name
|
|
124
|
+
AND t.table_schema = cc.table_schema
|
|
125
|
+
LEFT JOIN (
|
|
126
|
+
SELECT cl_r.relname as view_name, array_agg(DISTINCT cl_d.relname) AS table_names
|
|
127
|
+
FROM pg_rewrite AS r
|
|
128
|
+
JOIN pg_class AS cl_r ON r.ev_class=cl_r.oid
|
|
129
|
+
JOIN pg_depend AS d ON r.oid=d.objid
|
|
130
|
+
JOIN pg_class AS cl_d ON d.refobjid=cl_d.oid
|
|
131
|
+
WHERE cl_d.relkind IN ('r','v')
|
|
132
|
+
AND cl_d.relname <> cl_r.relname
|
|
133
|
+
GROUP BY cl_r.relname
|
|
134
|
+
) vr
|
|
135
|
+
ON t.table_name = vr.view_name
|
|
136
|
+
GROUP BY t.table_schema, t.table_name, t.is_view, t.view_definition, vr.table_names , t.oid, cc.columns
|
|
137
|
+
ORDER BY schema, name
|
|
138
138
|
`;
|
|
139
139
|
let result = await db.any(query, { schema });
|
|
140
140
|
result = await Promise.all(result
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTablesForSchemaPostgresSQL.js","sourceRoot":"","sources":["../../lib/DboBuilder/getTablesForSchemaPostgresSQL.ts"],"names":[],"mappings":";;;AAEA,kEAAyD;AAEzD,uLAAuL;AAChL,KAAK,UAAU,6BAA6B,CAAC,EAAE,EAAE,EAAE,MAAM,EAAc,EAAE,MAAM,GAAG,QAAQ;IAC/F,MAAM,KAAK,GACT
|
|
1
|
+
{"version":3,"file":"getTablesForSchemaPostgresSQL.js","sourceRoot":"","sources":["../../lib/DboBuilder/getTablesForSchemaPostgresSQL.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,135 +7,135 @@ export async function getTablesForSchemaPostgresSQL({ db, runSQL }: DboBuilder,
|
|
|
7
7
|
const query =
|
|
8
8
|
`
|
|
9
9
|
SELECT
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
10
|
+
jsonb_build_object(
|
|
11
|
+
'insert', TRUE,
|
|
12
|
+
'select', TRUE,
|
|
13
|
+
'update', TRUE,
|
|
14
|
+
'delete', EXISTS (
|
|
15
|
+
SELECT 1
|
|
16
|
+
FROM information_schema.role_table_grants rg
|
|
17
|
+
WHERE rg.table_name = t.table_name
|
|
18
|
+
AND rg.privilege_type = 'DELETE'
|
|
19
|
+
)
|
|
20
|
+
) as privileges
|
|
21
|
+
, t.table_schema as schema, t.table_name as name
|
|
22
|
+
, COALESCE(cc.columns, '[]'::JSONB) as columns
|
|
23
|
+
, t.oid
|
|
24
|
+
, t.is_view
|
|
25
|
+
, t.view_definition
|
|
26
|
+
, array_to_json(vr.table_names) as parent_tables
|
|
27
|
+
, obj_description(t.oid::regclass) as comment
|
|
28
|
+
FROM (
|
|
29
|
+
SELECT table_name,
|
|
30
|
+
table_schema,
|
|
31
|
+
oid,
|
|
32
|
+
is_view,
|
|
33
|
+
CASE WHEN is_view THEN pg_get_viewdef(format('%I.%I', table_schema, table_name)::REGCLASS, true) END as view_definition
|
|
34
|
+
FROM (
|
|
35
|
+
SELECT table_name, table_schema, table_type = 'VIEW' as is_view, regclass(table_schema || '.' || table_name)::oid as oid
|
|
36
|
+
FROM information_schema.tables
|
|
36
37
|
/* TODO - add support for materialized views
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
UNION ALL
|
|
39
|
+
SELECT table_name, table_schema
|
|
40
|
+
FROM (
|
|
41
|
+
SELECT relname as table_name, nspname as table_schema, true as is_view
|
|
42
|
+
FROM pg_catalog.pg_class AS _c
|
|
43
|
+
JOIN pg_catalog.pg_namespace AS _ns
|
|
44
|
+
ON _c.relnamespace = _ns.oid
|
|
45
|
+
WHERE relkind IN ( 'm' )
|
|
46
|
+
) materialized_views
|
|
46
47
|
*/
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
48
|
+
) tables_matviews
|
|
49
|
+
WHERE table_schema = ${asValue(schema)}
|
|
50
|
+
) t
|
|
51
|
+
LEFT join (
|
|
52
|
+
SELECT table_schema, table_name
|
|
53
|
+
, jsonb_agg((SELECT x FROM (
|
|
54
|
+
SELECT ccc.column_name as name,
|
|
55
|
+
ccc.data_type,
|
|
56
|
+
ccc.udt_name,
|
|
57
|
+
ccc.element_type,
|
|
58
|
+
ccc.element_udt_name,
|
|
59
|
+
ccc.is_pkey,
|
|
60
|
+
ccc.comment,
|
|
61
|
+
ccc.ordinal_position,
|
|
62
|
+
ccc.is_nullable = 'YES' as is_nullable,
|
|
63
|
+
ccc.is_updatable,
|
|
64
|
+
ccc.references,
|
|
65
|
+
ccc.has_default,
|
|
66
|
+
ccc.column_default,
|
|
67
|
+
COALESCE(ccc.privileges, '[]'::JSON) as privileges
|
|
68
|
+
) as x) ORDER BY ccc.ordinal_position ) as columns
|
|
69
|
+
FROM (
|
|
70
|
+
SELECT c.table_schema, c.table_name, c.column_name, c.data_type, c.udt_name
|
|
71
|
+
, e.data_type as element_type
|
|
72
|
+
, e.udt_name as element_udt_name
|
|
73
|
+
, col_description(format('%I.%I', c.table_schema, c.table_name)::regclass::oid, c.ordinal_position) as comment
|
|
74
|
+
--, CASE WHEN fc.ftable IS NOT NULL THEN row_to_json((SELECT t FROM (SELECT fc.ftable, fc.fcols, fc.cols) t)) END as references
|
|
75
|
+
, fc.references
|
|
76
|
+
, c.is_identity = 'YES' OR EXISTS (
|
|
77
|
+
SELECT 1
|
|
78
|
+
FROM information_schema.table_constraints as tc
|
|
79
|
+
JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
80
|
+
WHERE kcu.table_schema = c.table_schema AND kcu.table_name = c.table_name AND kcu.column_name = c.column_name AND tc.constraint_type IN ('PRIMARY KEY')
|
|
81
|
+
) as is_pkey
|
|
82
|
+
, c.ordinal_position
|
|
83
|
+
, COALESCE(c.column_default IS NOT NULL OR c.identity_generation = 'ALWAYS', false) as has_default
|
|
84
|
+
, c.column_default
|
|
85
|
+
, format('%I.%I', c.table_schema, c.table_name)::regclass::oid AS table_oid
|
|
86
|
+
, c.is_nullable
|
|
87
|
+
/* generated always and view columns cannot be updated */
|
|
88
|
+
, COALESCE(c.is_updatable, 'YES') = 'YES' AND COALESCE(c.is_generated, '') != 'ALWAYS' AND COALESCE(c.identity_generation, '') != 'ALWAYS' as is_updatable
|
|
89
|
+
, cp.privileges
|
|
90
|
+
FROM information_schema.columns c
|
|
91
|
+
LEFT JOIN (SELECT * FROM information_schema.element_types ) e
|
|
92
|
+
ON ((c.table_catalog, c.table_schema, c.table_name, 'TABLE', c.dtd_identifier)
|
|
93
|
+
= (e.object_catalog, e.object_schema, e.object_name, e.object_type, e.collection_type_identifier)
|
|
94
|
+
)
|
|
95
|
+
LEFT JOIN (
|
|
96
|
+
SELECT table_schema, table_name, column_name, json_agg(row_to_json((SELECT t FROM (SELECT cpp.privilege_type, cpp.is_grantable ) t))) as privileges
|
|
97
|
+
FROM information_schema.column_privileges cpp
|
|
98
|
+
GROUP BY table_schema, table_name, column_name
|
|
99
|
+
) cp
|
|
100
|
+
ON c.table_name = cp.table_name AND c.column_name = cp.column_name
|
|
101
|
+
LEFT JOIN (
|
|
102
|
+
--SELECT *
|
|
103
|
+
SELECT "table", unnest(ft.cols) as col, jsonb_agg(row_to_json((SELECT t FROM (SELECT ftable, fcols, cols) t))) as references
|
|
104
|
+
FROM (
|
|
105
|
+
SELECT
|
|
106
|
+
(SELECT r.relname from pg_class r where r.oid = c.conrelid) as table,
|
|
107
|
+
(SELECT array_agg(attname::text) from pg_attribute
|
|
108
|
+
where attrelid = c.conrelid and ARRAY[attnum] <@ c.conkey) as cols,
|
|
109
|
+
(SELECT array_agg(attname::text) from pg_attribute
|
|
110
|
+
where attrelid = c.confrelid and ARRAY[attnum] <@ c.confkey) as fcols,
|
|
111
|
+
(SELECT r.relname from pg_class r where r.oid = c.confrelid) as ftable
|
|
112
|
+
FROM pg_constraint c
|
|
113
|
+
) ft
|
|
114
|
+
WHERE ft.table IS NOT NULL
|
|
115
|
+
AND ft.ftable IS NOT NULL
|
|
116
|
+
-- c.confrelid = 'users'::regclass::oid
|
|
117
|
+
GROUP BY "table", unnest(cols)
|
|
118
|
+
) fc
|
|
119
|
+
ON fc.table = c.table_name
|
|
120
|
+
AND c.column_name::text = fc.col
|
|
121
|
+
) ccc
|
|
122
|
+
GROUP BY table_schema, table_name
|
|
123
|
+
) cc
|
|
124
|
+
ON t.table_name = cc.table_name
|
|
125
|
+
AND t.table_schema = cc.table_schema
|
|
126
|
+
LEFT JOIN (
|
|
127
|
+
SELECT cl_r.relname as view_name, array_agg(DISTINCT cl_d.relname) AS table_names
|
|
128
|
+
FROM pg_rewrite AS r
|
|
129
|
+
JOIN pg_class AS cl_r ON r.ev_class=cl_r.oid
|
|
130
|
+
JOIN pg_depend AS d ON r.oid=d.objid
|
|
131
|
+
JOIN pg_class AS cl_d ON d.refobjid=cl_d.oid
|
|
132
|
+
WHERE cl_d.relkind IN ('r','v')
|
|
133
|
+
AND cl_d.relname <> cl_r.relname
|
|
134
|
+
GROUP BY cl_r.relname
|
|
135
|
+
) vr
|
|
136
|
+
ON t.table_name = vr.view_name
|
|
137
|
+
GROUP BY t.table_schema, t.table_name, t.is_view, t.view_definition, vr.table_names , t.oid, cc.columns
|
|
138
|
+
ORDER BY schema, name
|
|
139
139
|
`;
|
|
140
140
|
|
|
141
141
|
let result: TableSchema[] = await db.any(query, { schema });
|
package/package.json
CHANGED
package/tests/client/PID.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
392354
|