prostgles-server 4.2.102 → 4.2.103
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/PubSubManager/getPubSubManagerInitQuery.d.ts.map +1 -1
- package/dist/PubSubManager/getPubSubManagerInitQuery.js +5 -3
- package/dist/PubSubManager/getPubSubManagerInitQuery.js.map +1 -1
- package/dist/PubSubManager/initPubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/initPubSubManager.js +0 -104
- package/dist/PubSubManager/initPubSubManager.js.map +1 -1
- package/lib/PubSubManager/getPubSubManagerInitQuery.ts +5 -3
- package/lib/PubSubManager/initPubSubManager.ts +0 -124
- package/package.json +1 -1
- package/tests/server/package-lock.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPubSubManagerInitQuery.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/getPubSubManagerInitQuery.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsC,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIpF,eAAO,MAAM,YAAY;;;;;;CAMf,CAAC;
|
|
1
|
+
{"version":3,"file":"getPubSubManagerInitQuery.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/getPubSubManagerInitQuery.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsC,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIpF,eAAO,MAAM,YAAY;;;;;;CAMf,CAAC;AAmmBX;;;GAGG;AACH,eAAO,MAAM,yBAAyB,SAAwB,aAAa,KAAG,QAAQ,MAAM,GAAG,SAAS,CAoBvG,CAAA"}
|
|
@@ -459,7 +459,9 @@ BEGIN
|
|
|
459
459
|
AFTER INSERT ON %2$s
|
|
460
460
|
REFERENCING NEW TABLE AS new_table
|
|
461
461
|
FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.data_watch_func}();
|
|
462
|
-
|
|
462
|
+
/* removed to allow less privileges for a user to create subscriptions
|
|
463
|
+
COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
|
|
464
|
+
*/
|
|
463
465
|
$q$,
|
|
464
466
|
'prostgles_triggers_' || trw.table_name || '_insert', trw.table_name
|
|
465
467
|
) || format(
|
|
@@ -469,7 +471,7 @@ BEGIN
|
|
|
469
471
|
AFTER UPDATE ON %2$s
|
|
470
472
|
REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table
|
|
471
473
|
FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.data_watch_func}();
|
|
472
|
-
COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
|
|
474
|
+
--COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
|
|
473
475
|
$q$,
|
|
474
476
|
'prostgles_triggers_' || trw.table_name || '_update', trw.table_name
|
|
475
477
|
) || format(
|
|
@@ -479,7 +481,7 @@ BEGIN
|
|
|
479
481
|
AFTER DELETE ON %2$s
|
|
480
482
|
REFERENCING OLD TABLE AS old_table
|
|
481
483
|
FOR EACH STATEMENT EXECUTE PROCEDURE ${exports.DB_OBJ_NAMES.data_watch_func}();
|
|
482
|
-
COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
|
|
484
|
+
--COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
|
|
483
485
|
$q$,
|
|
484
486
|
'prostgles_triggers_' || trw.table_name || '_delete', trw.table_name
|
|
485
487
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPubSubManagerInitQuery.js","sourceRoot":"","sources":["../../lib/PubSubManager/getPubSubManagerInitQuery.ts"],"names":[],"mappings":";;;AACA,qDAA2C;AAC3C,mEAAoD;AACpD,mDAAoF;AACpF,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAClD,6DAAwD;AAE3C,QAAA,YAAY,GAAG;IAC1B,uBAAuB,EAAE,mCAAmC;IAC5D,eAAe,EAAE,sCAAsC;IACvD,iBAAiB,EAAE,6BAA6B;IAChD,oBAAoB,EAAE,oCAAoC;IAC1D,yBAAyB,EAAE,yCAAyC;CAC5D,CAAC;AAEX,MAAM,6BAA6B,GAAG;;;;;;CAMrC,CAAC;AACF,MAAM,iCAAiC,GAAG;;;;;;CAMzC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,SAA8B,EAAE,EAAE,CAAC;;;;;;IAMrD,6BAAa,CAAC,kCAAkC;;;;;;;;;;;;;;YAcxC,6BAA6B;;;;;;;YAO7B,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4B5B,IAAA,uBAAO,EAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAsHI,oBAAY,CAAC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA+GjC,IAAA,uBAAO,EAAC,6BAAa,CAAC,OAAO,CAAC;;kCAE5B,IAAA,uBAAO,EAAC,6BAAa,CAAC,SAAS,CAAC;;kCAEhC,IAAA,uBAAO,EAAC,0BAAU,CAAC,IAAI,CAAC;;;;;;;kCAOxB,SAAS,CAAA,CAAC,CAAC,CAAC,6DAA6D,CAAC,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;kBAgB/F,IAAA,qCAAgB,GAAE;;;;;;;8BAON,oBAAY,CAAC,eAAe;;qCAErB,oBAAY,CAAC,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yEA+GA,oBAAY,CAAC,eAAe
|
|
1
|
+
{"version":3,"file":"getPubSubManagerInitQuery.js","sourceRoot":"","sources":["../../lib/PubSubManager/getPubSubManagerInitQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initPubSubManager.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/initPubSubManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,aAAa,EAAW,MAAM,iBAAiB,CAAC;AAExE,eAAO,MAAM,4BAA4B,oEAA8E,CAAC;AAExH,eAAO,MAAM,IAAI,OAAQ,MAAM,qBAA4C,CAAC;AAE5E,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"initPubSubManager.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/initPubSubManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,aAAa,EAAW,MAAM,iBAAiB,CAAC;AAExE,eAAO,MAAM,4BAA4B,oEAA8E,CAAC;AAExH,eAAO,MAAM,IAAI,OAAQ,MAAM,qBAA4C,CAAC;AAE5E,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA0E/F"}
|
|
@@ -64,110 +64,6 @@ async function initPubSubManager() {
|
|
|
64
64
|
DELETE FROM prostgles.app_triggers
|
|
65
65
|
WHERE app_id = ${(0, PubSubManager_1.asValue)(this.appId)}
|
|
66
66
|
`);
|
|
67
|
-
// console.log("REMOVE app check disabled");
|
|
68
|
-
// if (!this.appCheck && Math.random() > 12) {
|
|
69
|
-
// this.appCheck = setInterval(async () => {
|
|
70
|
-
// let checkForStaleTriggers = "";
|
|
71
|
-
// try {
|
|
72
|
-
// this.appChecking = true;
|
|
73
|
-
// const listeners = this.getActiveListeners();
|
|
74
|
-
// const updateCurrentlyUsedTriggersQuery = !listeners.length? "" : `
|
|
75
|
-
// UPDATE prostgles.app_triggers
|
|
76
|
-
// SET last_used = CASE WHEN (table_name, condition) IN (
|
|
77
|
-
// ${listeners.map(l => ` ( ${asValue(l.table_name)}, ${asValue(l.condition)} ) `).join(", ")}
|
|
78
|
-
// ) THEN NOW() ELSE last_used END
|
|
79
|
-
// WHERE app_id = ${asValue(this.appId)};
|
|
80
|
-
// `;
|
|
81
|
-
// const checkedListenerTableCond = listeners.map(l => `${l.table_name}.${l.condition}`);
|
|
82
|
-
// let dataTriggerCheckQuery = "";
|
|
83
|
-
// if(this.checkedListenerTableCond?.sort().join() !== checkedListenerTableCond.sort().join()){
|
|
84
|
-
// this.checkedListenerTableCond = checkedListenerTableCond;
|
|
85
|
-
// dataTriggerCheckQuery = `
|
|
86
|
-
// /* Delete unused triggers. Might deadlock */
|
|
87
|
-
// IF EXISTS ( SELECT 1 FROM prostgles.app_triggers)
|
|
88
|
-
// THEN
|
|
89
|
-
// /* TODO: Fixed deadlocks */
|
|
90
|
-
// --LOCK TABLE prostgles.app_triggers IN ACCESS EXCLUSIVE MODE;
|
|
91
|
-
// /* UPDATE currently used triggers */
|
|
92
|
-
// ${updateCurrentlyUsedTriggersQuery}
|
|
93
|
-
// /* DELETE stale triggers for current app. Other triggers will be deleted on app startup
|
|
94
|
-
// DELETE FROM prostgles.app_triggers
|
|
95
|
-
// WHERE app_id = ${asValue(this.appId)}
|
|
96
|
-
// AND last_used < NOW() - 4 * ${asValue(this.appCheckFrequencyMS)} * interval '1 millisecond'; -- 10 seconds at the moment
|
|
97
|
-
// */
|
|
98
|
-
// END IF;
|
|
99
|
-
// `
|
|
100
|
-
// }
|
|
101
|
-
// const queryIdentifier = "prostgles query used to keep track of which prgl backend clients are still connected"
|
|
102
|
-
// checkForStaleTriggers = `
|
|
103
|
-
// DO $$
|
|
104
|
-
// BEGIN
|
|
105
|
-
// /*
|
|
106
|
-
// ${queryIdentifier}
|
|
107
|
-
// ${REALTIME_TRIGGER_CHECK_QUERY}
|
|
108
|
-
// ${PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}
|
|
109
|
-
// */
|
|
110
|
-
// /* prostgles schema must exist */
|
|
111
|
-
// IF
|
|
112
|
-
// EXISTS (
|
|
113
|
-
// SELECT 1
|
|
114
|
-
// FROM information_schema.tables
|
|
115
|
-
// WHERE table_schema = 'prostgles'
|
|
116
|
-
// AND table_name = 'apps'
|
|
117
|
-
// )
|
|
118
|
-
// THEN
|
|
119
|
-
// /* Last check used to remove disconnected apps */
|
|
120
|
-
// UPDATE prostgles.apps
|
|
121
|
-
// SET last_check = NOW()
|
|
122
|
-
// WHERE id = ${asValue(this.appId)};
|
|
123
|
-
// ${dataTriggerCheckQuery}
|
|
124
|
-
// END IF;
|
|
125
|
-
// END $$;`
|
|
126
|
-
// const queryTimeoutMillis = Math.min(5e3, Math.round(this.appCheckFrequencyMS/2));
|
|
127
|
-
// const timeout = setTimeout(() => {
|
|
128
|
-
// this.db.any(`
|
|
129
|
-
// /*
|
|
130
|
-
// ${queryIdentifier}
|
|
131
|
-
// ${REALTIME_TRIGGER_CHECK_QUERY}
|
|
132
|
-
// ${PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}
|
|
133
|
-
// */
|
|
134
|
-
// DO $$
|
|
135
|
-
// BEGIN
|
|
136
|
-
// /* PERFORM pg_sleep(\${queryTimeoutMillis}/1e3); */
|
|
137
|
-
// PERFORM pg_cancel_backend(pid)
|
|
138
|
-
// FROM pg_catalog.pg_stat_activity
|
|
139
|
-
// WHERE pid <> pg_backend_pid()
|
|
140
|
-
// AND query = \${queryIdentifier};
|
|
141
|
-
// END $$;
|
|
142
|
-
// `, { queryTimeoutMillis, queryIdentifier })
|
|
143
|
-
// }, queryTimeoutMillis);
|
|
144
|
-
// await this.db.any(checkForStaleTriggers);
|
|
145
|
-
// clearTimeout(timeout);
|
|
146
|
-
// tries = 5;
|
|
147
|
-
// log("updated last_check");
|
|
148
|
-
// } catch (e: any) {
|
|
149
|
-
// tries --;
|
|
150
|
-
// /** In some cases a query idles and blocks everything else. Terminate all similar queries */
|
|
151
|
-
// this.db.any(
|
|
152
|
-
// "SELECT state, pg_terminate_backend(pid) from pg_stat_activity \
|
|
153
|
-
// WHERE query ilike ${qid} \
|
|
154
|
-
// AND pid <> pg_backend_pid();",
|
|
155
|
-
// { qid: `%${REALTIME_TRIGGER_CHECK_QUERY}%` }
|
|
156
|
-
// );
|
|
157
|
-
// /** If no tries left
|
|
158
|
-
// * OR
|
|
159
|
-
// * If this database was dropped
|
|
160
|
-
// *
|
|
161
|
-
// * then stop interval
|
|
162
|
-
// * */
|
|
163
|
-
// if(tries <= 0 || e?.code === "3D000"){ // && e.message.includes(this.db.$cn.database)
|
|
164
|
-
// clearInterval(this.appCheck);
|
|
165
|
-
// }
|
|
166
|
-
// console.error("appCheck FAILED: \n", e, checkForStaleTriggers);
|
|
167
|
-
// }
|
|
168
|
-
// this.appChecking = false;
|
|
169
|
-
// }, 0.8 * this.appCheckFrequencyMS);
|
|
170
|
-
// }
|
|
171
67
|
}
|
|
172
68
|
this.postgresNotifListenManager = new PostgresNotifListenManager_1.PostgresNotifListenManager(this.db, this.notifListener, PubSubManager_1.NOTIF_CHANNEL.getFull(this.appId));
|
|
173
69
|
await this.initialiseEventTriggers();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initPubSubManager.js","sourceRoot":"","sources":["../../lib/PubSubManager/initPubSubManager.ts"],"names":[],"mappings":";;;AAAA,qDAAsD;AACtD,8EAA2E;AAC3E,gFAA6E;AAC7E,mDAAwE;AACxE,2EAAwE;AAC3D,QAAA,4BAA4B,GAAG,kEAA2E,CAAC;AAEjH,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAA/D,QAAA,IAAI,QAA2D;AAErE,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,SAAS,CAAC;IAE7C,IAAI,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,qDAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAE/D;;;UAGE;QACF,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAU,CAAC;QACf,OAAO,IAAA,2BAAS,EAAC,SAAS,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,iGAAiG;gBACjG,MAAM,IAAA,YAAI,EAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAE1B,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC7B,KAAK,GAAG,SAAS,CAAC;gBAClB,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,IAAG,CAAC,WAAW,IAAI,IAAA,0BAAQ,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAC,CAAC;oBACpD,WAAW,GAAG,IAAI,CAAC;oBACnB,KAAK,GAAG,CAAC,CAAC;oBACV,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBAClD,CAAC;gBACD,KAAK,GAAG,CAAC,CAAC;gBACV,KAAK,EAAG,CAAC;YACX,CAAC;QACH,CAAC;QACD,IAAG,KAAK,EAAC,CAAC;YACR,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAAE,OAAO;QAEnC,oBAAoB;QACpB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACpD,MAAM,yBAAyB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,6CAAqB,EAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9K,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CACf;;sBAEc,EACZ;gBACA,IAAI,CAAC,KAAK;gBACV,kBAAkB;gBAClB,yBAAyB;aAC1B,CACF,CAAC;YAEF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,4CAA4C,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAChG,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpE,MAAM,+EAA+E,IAAI,CAAC,KAAK,aAAa,CAAC;YAC/G,CAAC;YAED,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;;yBAEC,IAAA,uBAAO,EAAC,IAAI,CAAC,KAAK,CAAC;OACrC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"initPubSubManager.js","sourceRoot":"","sources":["../../lib/PubSubManager/initPubSubManager.ts"],"names":[],"mappings":";;;AAAA,qDAAsD;AACtD,8EAA2E;AAC3E,gFAA6E;AAC7E,mDAAwE;AACxE,2EAAwE;AAC3D,QAAA,4BAA4B,GAAG,kEAA2E,CAAC;AAEjH,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAA/D,QAAA,IAAI,QAA2D;AAErE,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,SAAS,CAAC;IAE7C,IAAI,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,qDAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAE/D;;;UAGE;QACF,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAU,CAAC;QACf,OAAO,IAAA,2BAAS,EAAC,SAAS,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,iGAAiG;gBACjG,MAAM,IAAA,YAAI,EAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAE1B,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC7B,KAAK,GAAG,SAAS,CAAC;gBAClB,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,IAAG,CAAC,WAAW,IAAI,IAAA,0BAAQ,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAC,CAAC;oBACpD,WAAW,GAAG,IAAI,CAAC;oBACnB,KAAK,GAAG,CAAC,CAAC;oBACV,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBAClD,CAAC;gBACD,KAAK,GAAG,CAAC,CAAC;gBACV,KAAK,EAAG,CAAC;YACX,CAAC;QACH,CAAC;QACD,IAAG,KAAK,EAAC,CAAC;YACR,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAAE,OAAO;QAEnC,oBAAoB;QACpB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACpD,MAAM,yBAAyB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,6CAAqB,EAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9K,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CACf;;sBAEc,EACZ;gBACA,IAAI,CAAC,KAAK;gBACV,kBAAkB;gBAClB,yBAAyB;aAC1B,CACF,CAAC;YAEF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,4CAA4C,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAChG,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpE,MAAM,+EAA+E,IAAI,CAAC,KAAK,aAAa,CAAC;YAC/G,CAAC;YAED,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;;yBAEC,IAAA,uBAAO,EAAC,IAAI,CAAC,KAAK,CAAC;OACrC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,0BAA0B,GAAG,IAAI,uDAA0B,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,6BAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAEjI,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAErC,OAAO,IAAI,CAAC;IAEd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AA1ED,8CA0EC"}
|
|
@@ -460,7 +460,9 @@ BEGIN
|
|
|
460
460
|
AFTER INSERT ON %2$s
|
|
461
461
|
REFERENCING NEW TABLE AS new_table
|
|
462
462
|
FOR EACH STATEMENT EXECUTE PROCEDURE ${DB_OBJ_NAMES.data_watch_func}();
|
|
463
|
-
|
|
463
|
+
/* removed to allow less privileges for a user to create subscriptions
|
|
464
|
+
COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
|
|
465
|
+
*/
|
|
464
466
|
$q$,
|
|
465
467
|
'prostgles_triggers_' || trw.table_name || '_insert', trw.table_name
|
|
466
468
|
) || format(
|
|
@@ -470,7 +472,7 @@ BEGIN
|
|
|
470
472
|
AFTER UPDATE ON %2$s
|
|
471
473
|
REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table
|
|
472
474
|
FOR EACH STATEMENT EXECUTE PROCEDURE ${DB_OBJ_NAMES.data_watch_func}();
|
|
473
|
-
COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
|
|
475
|
+
--COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
|
|
474
476
|
$q$,
|
|
475
477
|
'prostgles_triggers_' || trw.table_name || '_update', trw.table_name
|
|
476
478
|
) || format(
|
|
@@ -480,7 +482,7 @@ BEGIN
|
|
|
480
482
|
AFTER DELETE ON %2$s
|
|
481
483
|
REFERENCING OLD TABLE AS old_table
|
|
482
484
|
FOR EACH STATEMENT EXECUTE PROCEDURE ${DB_OBJ_NAMES.data_watch_func}();
|
|
483
|
-
COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
|
|
485
|
+
--COMMENT ON TRIGGER %1$I ON %2$s IS 'Prostgles internal trigger used to notify when data in the table changed';
|
|
484
486
|
$q$,
|
|
485
487
|
'prostgles_triggers_' || trw.table_name || '_delete', trw.table_name
|
|
486
488
|
);
|
|
@@ -70,130 +70,6 @@ export async function initPubSubManager(this: PubSubManager): Promise<PubSubMana
|
|
|
70
70
|
DELETE FROM prostgles.app_triggers
|
|
71
71
|
WHERE app_id = ${asValue(this.appId)}
|
|
72
72
|
`);
|
|
73
|
-
|
|
74
|
-
// console.log("REMOVE app check disabled");
|
|
75
|
-
// if (!this.appCheck && Math.random() > 12) {
|
|
76
|
-
|
|
77
|
-
// this.appCheck = setInterval(async () => {
|
|
78
|
-
// let checkForStaleTriggers = "";
|
|
79
|
-
// try {
|
|
80
|
-
|
|
81
|
-
// this.appChecking = true;
|
|
82
|
-
|
|
83
|
-
// const listeners = this.getActiveListeners();
|
|
84
|
-
// const updateCurrentlyUsedTriggersQuery = !listeners.length? "" : `
|
|
85
|
-
// UPDATE prostgles.app_triggers
|
|
86
|
-
// SET last_used = CASE WHEN (table_name, condition) IN (
|
|
87
|
-
// ${listeners.map(l => ` ( ${asValue(l.table_name)}, ${asValue(l.condition)} ) `).join(", ")}
|
|
88
|
-
// ) THEN NOW() ELSE last_used END
|
|
89
|
-
// WHERE app_id = ${asValue(this.appId)};
|
|
90
|
-
// `;
|
|
91
|
-
|
|
92
|
-
// const checkedListenerTableCond = listeners.map(l => `${l.table_name}.${l.condition}`);
|
|
93
|
-
// let dataTriggerCheckQuery = "";
|
|
94
|
-
// if(this.checkedListenerTableCond?.sort().join() !== checkedListenerTableCond.sort().join()){
|
|
95
|
-
// this.checkedListenerTableCond = checkedListenerTableCond;
|
|
96
|
-
// dataTriggerCheckQuery = `
|
|
97
|
-
// /* Delete unused triggers. Might deadlock */
|
|
98
|
-
// IF EXISTS ( SELECT 1 FROM prostgles.app_triggers)
|
|
99
|
-
|
|
100
|
-
// THEN
|
|
101
|
-
|
|
102
|
-
// /* TODO: Fixed deadlocks */
|
|
103
|
-
// --LOCK TABLE prostgles.app_triggers IN ACCESS EXCLUSIVE MODE;
|
|
104
|
-
|
|
105
|
-
// /* UPDATE currently used triggers */
|
|
106
|
-
// ${updateCurrentlyUsedTriggersQuery}
|
|
107
|
-
|
|
108
|
-
// /* DELETE stale triggers for current app. Other triggers will be deleted on app startup
|
|
109
|
-
// DELETE FROM prostgles.app_triggers
|
|
110
|
-
// WHERE app_id = ${asValue(this.appId)}
|
|
111
|
-
// AND last_used < NOW() - 4 * ${asValue(this.appCheckFrequencyMS)} * interval '1 millisecond'; -- 10 seconds at the moment
|
|
112
|
-
// */
|
|
113
|
-
|
|
114
|
-
// END IF;
|
|
115
|
-
|
|
116
|
-
// `
|
|
117
|
-
// }
|
|
118
|
-
|
|
119
|
-
// const queryIdentifier = "prostgles query used to keep track of which prgl backend clients are still connected"
|
|
120
|
-
// checkForStaleTriggers = `
|
|
121
|
-
// DO $$
|
|
122
|
-
// BEGIN
|
|
123
|
-
// /*
|
|
124
|
-
// ${queryIdentifier}
|
|
125
|
-
// ${REALTIME_TRIGGER_CHECK_QUERY}
|
|
126
|
-
// ${PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}
|
|
127
|
-
// */
|
|
128
|
-
// /* prostgles schema must exist */
|
|
129
|
-
// IF
|
|
130
|
-
// EXISTS (
|
|
131
|
-
// SELECT 1
|
|
132
|
-
// FROM information_schema.tables
|
|
133
|
-
// WHERE table_schema = 'prostgles'
|
|
134
|
-
// AND table_name = 'apps'
|
|
135
|
-
// )
|
|
136
|
-
// THEN
|
|
137
|
-
|
|
138
|
-
// /* Last check used to remove disconnected apps */
|
|
139
|
-
// UPDATE prostgles.apps
|
|
140
|
-
// SET last_check = NOW()
|
|
141
|
-
// WHERE id = ${asValue(this.appId)};
|
|
142
|
-
|
|
143
|
-
// ${dataTriggerCheckQuery}
|
|
144
|
-
// END IF;
|
|
145
|
-
|
|
146
|
-
// END $$;`
|
|
147
|
-
|
|
148
|
-
// const queryTimeoutMillis = Math.min(5e3, Math.round(this.appCheckFrequencyMS/2));
|
|
149
|
-
// const timeout = setTimeout(() => {
|
|
150
|
-
// this.db.any(`
|
|
151
|
-
// /*
|
|
152
|
-
// ${queryIdentifier}
|
|
153
|
-
// ${REALTIME_TRIGGER_CHECK_QUERY}
|
|
154
|
-
// ${PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}
|
|
155
|
-
// */
|
|
156
|
-
// DO $$
|
|
157
|
-
// BEGIN
|
|
158
|
-
// /* PERFORM pg_sleep(\${queryTimeoutMillis}/1e3); */
|
|
159
|
-
// PERFORM pg_cancel_backend(pid)
|
|
160
|
-
// FROM pg_catalog.pg_stat_activity
|
|
161
|
-
// WHERE pid <> pg_backend_pid()
|
|
162
|
-
// AND query = \${queryIdentifier};
|
|
163
|
-
// END $$;
|
|
164
|
-
// `, { queryTimeoutMillis, queryIdentifier })
|
|
165
|
-
// }, queryTimeoutMillis);
|
|
166
|
-
// await this.db.any(checkForStaleTriggers);
|
|
167
|
-
// clearTimeout(timeout);
|
|
168
|
-
|
|
169
|
-
// tries = 5;
|
|
170
|
-
// log("updated last_check");
|
|
171
|
-
// } catch (e: any) {
|
|
172
|
-
// tries --;
|
|
173
|
-
|
|
174
|
-
// /** In some cases a query idles and blocks everything else. Terminate all similar queries */
|
|
175
|
-
// this.db.any(
|
|
176
|
-
// "SELECT state, pg_terminate_backend(pid) from pg_stat_activity \
|
|
177
|
-
// WHERE query ilike ${qid} \
|
|
178
|
-
// AND pid <> pg_backend_pid();",
|
|
179
|
-
// { qid: `%${REALTIME_TRIGGER_CHECK_QUERY}%` }
|
|
180
|
-
// );
|
|
181
|
-
|
|
182
|
-
// /** If no tries left
|
|
183
|
-
// * OR
|
|
184
|
-
// * If this database was dropped
|
|
185
|
-
// *
|
|
186
|
-
// * then stop interval
|
|
187
|
-
// * */
|
|
188
|
-
// if(tries <= 0 || e?.code === "3D000"){ // && e.message.includes(this.db.$cn.database)
|
|
189
|
-
// clearInterval(this.appCheck);
|
|
190
|
-
// }
|
|
191
|
-
// console.error("appCheck FAILED: \n", e, checkForStaleTriggers);
|
|
192
|
-
// }
|
|
193
|
-
|
|
194
|
-
// this.appChecking = false;
|
|
195
|
-
// }, 0.8 * this.appCheckFrequencyMS);
|
|
196
|
-
// }
|
|
197
73
|
}
|
|
198
74
|
|
|
199
75
|
this.postgresNotifListenManager = new PostgresNotifListenManager(this.db, this.notifListener, NOTIF_CHANNEL.getFull(this.appId));
|
package/package.json
CHANGED