Skip to content

Commit 9f65504

Browse files
committed
remove postgres trigger
1 parent c3f4b3f commit 9f65504

File tree

3 files changed

+25
-39
lines changed

3 files changed

+25
-39
lines changed

spec/PostgresStorageAdapter.spec.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -430,16 +430,13 @@ describe_only_db('postgres')('PostgresStorageAdapter', () => {
430430
expect(adapter._onchange).toHaveBeenCalled();
431431
});
432432

433-
it('Idempotency class should have trigger', async () => {
433+
it('Idempotency class should have function', async () => {
434434
await reconfigureServer();
435435
const config = Config.get('test');
436436
const adapter = config.database.adapter;
437437
const client = adapter._client;
438-
const triggers = await client.one("SELECT event_object_table, trigger_name, event_manipulation, action_statement FROM information_schema.triggers WHERE event_object_table = '_Idempotency' ORDER BY event_object_table,event_manipulation");
439-
expect(triggers.event_object_table).toBe("_Idempotency");
440-
expect(triggers.trigger_name).toBe("idempodency_delete_old_rows_trigger");
441-
expect(triggers.event_manipulation).toBe("INSERT");
442-
expect(triggers.action_statement).toBe("EXECUTE FUNCTION idempodency_delete_old_rows()");
438+
const foundFunction = await client.one("SELECT format('%I.%I(%s)', ns.nspname, p.proname, oidvectortypes(p.proargtypes)) FROM pg_proc p INNER JOIN pg_namespace ns ON (p.pronamespace = ns.oid) WHERE p.proname = 'idempodency_delete_old_rows'");
439+
expect(foundFunction.format).toBe("public.idempodency_delete_old_rows()");
443440
});
444441
});
445442

src/Adapters/Storage/Postgres/PostgresStorageAdapter.js

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2417,9 +2417,9 @@ export class PostgresStorageAdapter implements StorageAdapter {
24172417
? fieldNames.map((fieldName, index) => `lower($${index + 3}:name) varchar_pattern_ops`)
24182418
: fieldNames.map((fieldName, index) => `$${index + 3}:name`);
24192419
const qs = `CREATE INDEX IF NOT EXISTS $1:name ON $2:name (${constraintPatterns.join()})`;
2420-
const setIdempodencyTrigger = options.setIdempodencyTrigger !== undefined ? options.setIdempodencyTrigger : false;
2420+
const setIdempodencyTrigger = options.setIdempodencyFunction !== undefined ? options.setIdempodencyTrigger : false;
24212421
if (setIdempodencyTrigger) {
2422-
await this.ensureIdempodencyTriggerExists(options);
2422+
await this.ensureIdempodencyFunctionExists(options);
24232423
}
24242424
return conn.none(qs, [indexNameOptions.name, className, ...fieldNames])
24252425
.catch(error => {
@@ -2443,44 +2443,26 @@ export class PostgresStorageAdapter implements StorageAdapter {
24432443
});
24442444
}
24452445
2446-
async deleteIdempodencyTrigger(
2446+
async deleteIdempodencyFunction(
24472447
options?: Object = {}
24482448
): Promise<any> {
24492449
const conn = options.conn !== undefined ? options.conn : this._client;
2450-
const qs = 'DROP TRIGGER IF EXISTS idempodency_delete_old_rows_trigger ON "_Idempotency"';
2450+
const qs = 'DROP FUNCTION IF EXISTS idempodency_delete_old_rows()';
24512451
return conn
24522452
.none(qs)
24532453
.catch(error => {
24542454
throw error;
24552455
});
24562456
}
24572457
2458-
async ensureIdempodencyTriggerExists(
2458+
async ensureIdempodencyFunctionExists(
24592459
options?: Object = {}
24602460
): Promise<any> {
24612461
const conn = options.conn !== undefined ? options.conn : this._client;
24622462
const ttlOptions = options.ttl !== undefined ? `${options.ttl} seconds` : '60 seconds';
24632463
const qs = 'CREATE OR REPLACE FUNCTION idempodency_delete_old_rows() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN DELETE FROM "_Idempotency" WHERE expire < NOW() - INTERVAL $1; RETURN NEW; END; $$;';
2464-
await this.deleteIdempodencyTrigger(options = { conn: conn })
2465-
.catch(error => {
2466-
throw error;
2467-
})
2468-
await conn
2469-
.none(qs, [ttlOptions])
2470-
.catch(error => {
2471-
if (
2472-
error.code === PostgresDuplicateRelationError ||
2473-
error.code === PostgresUniqueIndexViolationError ||
2474-
error.code === PostgresDuplicateObjectError
2475-
) {
2476-
// Function already exists, must have been created by a different request. Ignore error.
2477-
} else {
2478-
throw error;
2479-
}
2480-
});
2481-
const qs2 = 'CREATE TRIGGER idempodency_delete_old_rows_trigger AFTER INSERT ON "_Idempotency" FOR EACH ROW EXECUTE PROCEDURE idempodency_delete_old_rows()';
24822464
return conn
2483-
.none(qs2)
2465+
.none(qs, [ttlOptions])
24842466
.catch(error => {
24852467
if (
24862468
error.code === PostgresDuplicateRelationError ||

src/Controllers/DatabaseController.js

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1760,18 +1760,25 @@ class DatabaseController {
17601760
throw error;
17611761
});
17621762

1763-
const options = this.idempotencyOptions;
17641763
if (this.adapter instanceof MongoStorageAdapter) {
1765-
options.ttl = 0;
1764+
await this.adapter
1765+
.ensureIndex('_Idempotency', requiredIdempotencyFields, ['expire'], 'ttl', false, {
1766+
ttl: 0,
1767+
})
1768+
.catch(error => {
1769+
logger.warn('Unable to create TTL index for idempotency expire date: ', error);
1770+
throw error;
1771+
});
17661772
} else if (this.adapter instanceof PostgresStorageAdapter) {
1767-
options.setIdempodencyTrigger = true;
1773+
const options = this.idempotencyOptions;
1774+
options.setIdempodencyFunction = true;
1775+
await this.adapter
1776+
.ensureIndex('_Idempotency', requiredIdempotencyFields, ['expire'], 'ttl', false, options)
1777+
.catch(error => {
1778+
logger.warn('Unable to create TTL index for idempotency expire date: ', error);
1779+
throw error;
1780+
});
17681781
}
1769-
await this.adapter
1770-
.ensureIndex('_Idempotency', requiredIdempotencyFields, ['expire'], 'ttl', false, options)
1771-
.catch(error => {
1772-
logger.warn('Unable to create TTL index for idempotency expire date: ', error);
1773-
throw error;
1774-
});
17751782
await this.adapter.updateSchemaWithIndexes();
17761783
}
17771784

0 commit comments

Comments
 (0)