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.
@@ -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
- 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
- , cc.columns
22
- , cc.table_oid as oid
23
- , t.is_view
24
- , t.view_definition
25
- , array_to_json(vr.table_names) as parent_tables
26
- , obj_description(cc.table_oid::regclass) as comment
27
- FROM (
28
- SELECT table_name,
29
- table_schema,
30
- is_view,
31
- CASE WHEN is_view THEN pg_get_viewdef(format('%I.%I', table_schema, table_name)::REGCLASS, true) END as view_definition
32
- FROM (
33
- SELECT table_name, table_schema, table_type = 'VIEW' as is_view
34
- FROM information_schema.tables
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
- UNION ALL
37
- SELECT table_name, table_schema
38
- FROM (
39
- SELECT relname as table_name, nspname as table_schema, true as is_view
40
- FROM pg_catalog.pg_class AS _c
41
- JOIN pg_catalog.pg_namespace AS _ns
42
- ON _c.relnamespace = _ns.oid
43
- WHERE relkind IN ( 'm' )
44
- ) materialized_views
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
- ) tables_matviews
47
- WHERE table_schema = ${(0, PubSubManager_1.asValue)(schema)}
48
- ) t
49
- INNER join (
50
- SELECT ccc.table_oid, table_schema, table_name
51
- , jsonb_agg((SELECT x FROM (
52
- SELECT ccc.column_name as name,
53
- ccc.data_type,
54
- ccc.udt_name,
55
- ccc.element_type,
56
- ccc.element_udt_name,
57
- ccc.is_pkey,
58
- ccc.comment,
59
- ccc.ordinal_position,
60
- ccc.is_nullable = 'YES' as is_nullable,
61
- ccc.is_updatable,
62
- ccc.references,
63
- ccc.has_default,
64
- ccc.column_default,
65
- COALESCE(ccc.privileges, '[]'::JSON) as privileges
66
- ) as x) ORDER BY ccc.ordinal_position ) as columns
67
- FROM (
68
- SELECT c.table_schema, c.table_name, c.column_name, c.data_type, c.udt_name
69
- , e.data_type as element_type
70
- , e.udt_name as element_udt_name
71
- , col_description(format('%I.%I', c.table_schema, c.table_name)::regclass::oid, c.ordinal_position) as comment
72
- --, 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
73
- , fc.references
74
- , c.is_identity = 'YES' OR EXISTS (
75
- SELECT 1
76
- FROM information_schema.table_constraints as tc
77
- JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
78
- 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')
79
- ) as is_pkey
80
- , c.ordinal_position
81
- , COALESCE(c.column_default IS NOT NULL OR c.identity_generation = 'ALWAYS', false) as has_default
82
- , c.column_default
83
- , format('%I.%I', c.table_schema, c.table_name)::regclass::oid AS table_oid
84
- , c.is_nullable
85
- /* generated always and view columns cannot be updated */
86
- , COALESCE(c.is_updatable, 'YES') = 'YES' AND COALESCE(c.is_generated, '') != 'ALWAYS' AND COALESCE(c.identity_generation, '') != 'ALWAYS' as is_updatable
87
- , cp.privileges
88
- FROM information_schema.columns c
89
- LEFT JOIN (SELECT * FROM information_schema.element_types ) e
90
- ON ((c.table_catalog, c.table_schema, c.table_name, 'TABLE', c.dtd_identifier)
91
- = (e.object_catalog, e.object_schema, e.object_name, e.object_type, e.collection_type_identifier)
92
- )
93
- LEFT JOIN (
94
- 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
95
- FROM information_schema.column_privileges cpp
96
- GROUP BY table_schema, table_name, column_name
97
- ) cp
98
- ON c.table_name = cp.table_name AND c.column_name = cp.column_name
99
- LEFT JOIN (
100
- --SELECT *
101
- SELECT "table", unnest(ft.cols) as col, jsonb_agg(row_to_json((SELECT t FROM (SELECT ftable, fcols, cols) t))) as references
102
- FROM (
103
- SELECT
104
- (SELECT r.relname from pg_class r where r.oid = c.conrelid) as table,
105
- (SELECT array_agg(attname::text) from pg_attribute
106
- where attrelid = c.conrelid and ARRAY[attnum] <@ c.conkey) as cols,
107
- (SELECT array_agg(attname::text) from pg_attribute
108
- where attrelid = c.confrelid and ARRAY[attnum] <@ c.confkey) as fcols,
109
- (SELECT r.relname from pg_class r where r.oid = c.confrelid) as ftable
110
- FROM pg_constraint c
111
- ) ft
112
- WHERE ft.table IS NOT NULL
113
- AND ft.ftable IS NOT NULL
114
- -- c.confrelid = 'users'::regclass::oid
115
- GROUP BY "table", unnest(cols)
116
- ) fc
117
- ON fc.table = c.table_name
118
- AND c.column_name::text = fc.col
119
- ) ccc
120
- GROUP BY table_oid, table_schema, table_name
121
- ) cc
122
- ON t.table_name = cc.table_name
123
- AND t.table_schema = cc.table_schema
124
- LEFT JOIN (
125
- SELECT cl_r.relname as view_name, array_agg(DISTINCT cl_d.relname) AS table_names
126
- FROM pg_rewrite AS r
127
- JOIN pg_class AS cl_r ON r.ev_class=cl_r.oid
128
- JOIN pg_depend AS d ON r.oid=d.objid
129
- JOIN pg_class AS cl_d ON d.refobjid=cl_d.oid
130
- WHERE cl_d.relkind IN ('r','v')
131
- AND cl_d.relname <> cl_r.relname
132
- GROUP BY cl_r.relname
133
- ) vr
134
- ON t.table_name = vr.view_name
135
- GROUP BY t.table_schema, t.table_name, t.is_view, t.view_definition, vr.table_names , cc.table_oid, cc.columns
136
- ORDER BY schema, name
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAwCyB,IAAA,uBAAO,EAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2FvC,CAAC;IAEJ,IAAI,MAAM,GAAkB,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5D,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM;SAC9B,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;QACf,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC;QACrG,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC;QACrG,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC;QAErG,sDAAsD;QACtD,IAAI,SAAS,GAAqD,EAAE,CAAC;QACrE,IAAG,GAAG,CAAC,OAAO,EAAC;YACb,IAAI;gBACF,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;gBACnH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,eAAgB,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,CAAyB,CAAC;gBACnI,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;oBACnB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;oBACzD,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;oBACjF,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACnJ,MAAM,MAAM,GAAqB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;wBAChD,MAAM,CAAC,GAAmD;4BACxD,IAAI,EAAE,EAAE,CAAC,UAAW;4BACpB,UAAU,EAAE,CAAC;oCACX,MAAM,EAAE,EAAE,CAAC,IAAI;oCACf,KAAK,EAAE,CAAC,EAAE,CAAC,UAAW,CAAC;oCACvB,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;iCAChB,CAAC;yBACH,CAAA;wBACD,OAAO,CAAC,CAAC;oBACX,CAAC,CAAC,CAAA;oBACF,SAAS,GAAG;wBACV,GAAG,SAAS;wBACZ,GAAG,MAAM;qBACV,CAAC;gBACJ,CAAC,CAAC,CAAC;aACJ;YAAC,OAAM,GAAG,EAAC;gBACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACpB;SACF;QAED,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAClC,IAAI,GAAG,CAAC,WAAW,EAAE;gBACnB,8BAA8B;gBAC9B,GAAG,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;aAC1I;YAED,MAAM,QAAQ,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA;YAC5D,IAAG,QAAQ,EAAC;gBACV,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;aACtC;YAED,OAAO,GAAG,CAAC;QAEb,CAAC,CAAC,CAAA,CAAA,wDAAwD;QAC1D,2DAA2D;QAE3D,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC,CAAC;IAEN,OAAO,MAAM,CAAC;AAChB,CAAC;AApMD,sEAoMC"}
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
- 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
- , cc.columns
23
- , cc.table_oid as oid
24
- , t.is_view
25
- , t.view_definition
26
- , array_to_json(vr.table_names) as parent_tables
27
- , obj_description(cc.table_oid::regclass) as comment
28
- FROM (
29
- SELECT table_name,
30
- table_schema,
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
35
- FROM information_schema.tables
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
- 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
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
- ) tables_matviews
48
- WHERE table_schema = ${asValue(schema)}
49
- ) t
50
- INNER join (
51
- SELECT ccc.table_oid, 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_oid, 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 , cc.table_oid, cc.columns
137
- ORDER BY schema, name
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "4.1.2",
3
+ "version": "4.1.3",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1 +1 @@
1
- 150935
1
+ 392354
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "../..": {
23
23
  "name": "prostgles-server",
24
- "version": "4.0.61",
24
+ "version": "4.1.2",
25
25
  "license": "MIT",
26
26
  "dependencies": {
27
27
  "@aws-sdk/client-s3": "^3.363.0",