Skip to content

Commit 8dd76f5

Browse files
robknightichub
andcommitted
Use postgres-pool instead of node-postgres (#438)
This fixes various issues with node-postgres, specifically that the connection pooling implementation does not work well: brianc/node-postgres#1611 brianc/node-postgres#2112 --------- Co-authored-by: Ivan Chub <[email protected]>
1 parent 5341ed4 commit 8dd76f5

31 files changed

+106
-53
lines changed

apps/passport-server/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"p-queue": "6",
4040
"pg": "^8.8.0",
4141
"postgres-migrations": "^5.3.0",
42+
"postgres-pool": "^7.0.2",
4243
"react": "^18.2.0",
4344
"react-dom": "^18.2.0",
4445
"request": "^2.88.2",

apps/passport-server/src/apis/devconnect/organizer.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { PretixOrganizersConfig } from "../../database/models";
33
import { fetchPretixConfiguration } from "../../database/queries/pretix_config/fetchPretixConfiguration";
44
import { logger } from "../../util/logger";
@@ -37,7 +37,7 @@ function pretixConfigDBToDevconnectPretixConfig(
3737
superuserItemIds: eventDB.superuser_item_ids
3838
})),
3939
token: organizerDB.token
40-
}) satisfies DevconnectPretixOrganizerConfig
40+
} satisfies DevconnectPretixOrganizerConfig)
4141
)
4242
};
4343
}

apps/passport-server/src/database/postgresConfiguration.ts

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { ClientConfig, PoolConfig } from "pg";
1+
import { ClientConfig } from "pg";
2+
import { PoolOptionsExplicit, SslSettings } from "postgres-pool";
23

34
export interface DBConfiguration extends ClientConfig {
45
user: string;
@@ -8,7 +9,7 @@ export interface DBConfiguration extends ClientConfig {
89
port: number;
910
}
1011

11-
export function getDatabaseConfiguration(): PoolConfig {
12+
export function getDatabaseConfiguration(): PoolOptionsExplicit & SslSettings {
1213
if (process.env.DATABASE_USERNAME === undefined) {
1314
throw new Error("Missing environment variable: DATABASE_USERNAME");
1415
}
@@ -32,11 +33,14 @@ export function getDatabaseConfiguration(): PoolConfig {
3233
host: process.env.DATABASE_HOST,
3334
database: process.env.DATABASE_DB_NAME,
3435
port: 5432,
35-
ssl: process.env.DATABASE_SSL === "true",
36+
ssl:
37+
process.env.DATABASE_SSL === "true"
38+
? { rejectUnauthorized: false }
39+
: undefined,
3640

3741
// Pool configuration
38-
connectionTimeoutMillis: 1_000,
39-
idleTimeoutMillis: 0,
40-
max: 8,
42+
connectionTimeoutMillis: 16_000,
43+
idleTimeoutMillis: 8_000,
44+
poolSize: 8
4145
};
4246
}

apps/passport-server/src/database/postgresPool.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { logger } from "../util/logger";
33
import { getDatabaseConfiguration } from "./postgresConfiguration";
44
import { migrateDatabase } from "./postgresMigrations";

apps/passport-server/src/database/queries/commitments.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { CommitmentRow } from "../models";
33
import { sqlQuery } from "../sqlQuery";
44

apps/passport-server/src/database/queries/devconnect_pretix_tickets/fetchDevconnectPretixTicket.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import {
33
DevconnectPretixTicketDB,
44
DevconnectPretixTicketDBWithEmailAndItem,

apps/passport-server/src/database/queries/devconnect_pretix_tickets/insertDevconnectPretixTicket.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { DevconnectPretixTicket } from "../../models";
33
import { sqlQuery } from "../../sqlQuery";
44

apps/passport-server/src/database/queries/devconnect_pretix_tickets/softDeleteDevconnectPretixTicket.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { DevconnectPretixTicketDB } from "../../models";
33
import { sqlQuery } from "../../sqlQuery";
44

apps/passport-server/src/database/queries/devconnect_pretix_tickets/updateDevconnectPretixTicket.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { DevconnectPretixTicket } from "../../models";
33
import { sqlQuery } from "../../sqlQuery";
44

apps/passport-server/src/database/queries/e2ee.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { EncryptedStorageModel } from "../models";
33
import { sqlQuery } from "../sqlQuery";
44

apps/passport-server/src/database/queries/emailToken.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { sqlQuery } from "../sqlQuery";
33

44
/**

apps/passport-server/src/database/queries/fetchStatus.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { sqlQuery } from "../sqlQuery";
33

44
/**

apps/passport-server/src/database/queries/historicSemaphore.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { Pool, QueryResultRow } from "pg";
1+
import { QueryResultRow } from "pg";
2+
import { Pool } from "postgres-pool";
23
import { HistoricSemaphoreGroup } from "../models";
34
import { sqlQuery } from "../sqlQuery";
45

apps/passport-server/src/database/queries/pretixEventInfo.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { PretixEventInfo, PretixItemInfo } from "../models";
33
import { sqlQuery } from "../sqlQuery";
44

apps/passport-server/src/database/queries/pretixItemInfo.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { PretixItemInfo } from "../models";
33
import { sqlQuery } from "../sqlQuery";
44

apps/passport-server/src/database/queries/pretix_config/fetchPretixConfiguration.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { PretixOrganizersConfig } from "../../models";
33
import { sqlQuery } from "../../sqlQuery";
44

apps/passport-server/src/database/queries/pretix_config/insertConfiguration.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { PretixOrganizerRow } from "../../models";
33
import { sqlQuery } from "../../sqlQuery";
44

apps/passport-server/src/database/queries/saveCommitment.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { logger } from "../../util/logger";
33
import { sqlQuery } from "../sqlQuery";
44

apps/passport-server/src/database/queries/zuzalu_pretix_tickets/deleteZuzaluUser.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { sqlQuery } from "../../sqlQuery";
33

44
/**
@@ -10,7 +10,7 @@ export async function deleteZuzaluUser(
1010
email: string
1111
): Promise<void> {
1212
await sqlQuery(client, `delete from zuzalu_pretix_tickets where email = $1`, [
13-
email,
13+
email
1414
]);
1515

1616
await sqlQuery(client, `delete from commitments where email = $1`, [email]);

apps/passport-server/src/database/queries/zuzalu_pretix_tickets/fetchZuzaluUser.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { LoggedInZuzaluUser, ZuzaluUser } from "../../models";
33
import { sqlQuery } from "../../sqlQuery";
44

@@ -85,7 +85,8 @@ where c.uuid = $1;`,
8585
export async function fetchAllLoggedInZuzaluUsers(
8686
client: Pool
8787
): Promise<LoggedInZuzaluUser[]> {
88-
const result = await client.query(
88+
const result = await sqlQuery(
89+
client,
8990
`\
9091
select
9192
c.uuid,

apps/passport-server/src/database/queries/zuzalu_pretix_tickets/insertZuzaluPretixTicket.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { ZuzaluPretixTicket } from "../../models";
33
import { sqlQuery } from "../../sqlQuery";
44

@@ -23,7 +23,7 @@ on conflict do nothing;`,
2323
params.order_id,
2424
params.visitor_date_ranges === undefined
2525
? undefined
26-
: JSON.stringify(params.visitor_date_ranges),
26+
: JSON.stringify(params.visitor_date_ranges)
2727
]
2828
);
2929
return result.rowCount;

apps/passport-server/src/database/queries/zuzalu_pretix_tickets/updateZuzaluPretixTicket.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import { ZuzaluPretixTicket } from "../../models";
33
import { sqlQuery } from "../../sqlQuery";
44

@@ -21,7 +21,7 @@ where email=$1;`,
2121
params.visitor_date_ranges === undefined
2222
? undefined
2323
: JSON.stringify(params.visitor_date_ranges),
24-
params.name,
24+
params.name
2525
]
2626
);
2727
return result.rowCount;

apps/passport-server/src/database/sqlQuery.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { Pool, QueryResult } from "pg";
1+
import { QueryResult } from "pg";
2+
import { Pool } from "postgres-pool";
23
import { traced } from "../services/telemetryService";
34

45
/**

apps/passport-server/src/services/devconnectPretixSyncService.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Pool } from "pg";
1+
import { Pool } from "postgres-pool";
22
import {
33
DevconnectPretixEvent,
44
DevconnectPretixEventSettings,

apps/passport-server/src/services/pretixSyncService.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { DateRange } from "@pcd/passport-interface";
2-
import { Pool } from "pg";
2+
import { Pool } from "postgres-pool";
33
import { IPretixAPI, PretixOrder, PretixSubevent } from "../apis/pretixAPI";
44
import { ZuzaluPretixTicket, ZuzaluUserRole } from "../database/models";
55
import { deleteZuzaluUser } from "../database/queries/zuzalu_pretix_tickets/deleteZuzaluUser";
@@ -10,7 +10,7 @@ import { ApplicationContext } from "../types";
1010
import { logger } from "../util/logger";
1111
import {
1212
pretixTicketsDifferent,
13-
ticketsToMapByEmail,
13+
ticketsToMapByEmail
1414
} from "../util/zuzaluUser";
1515
import { RollbarService } from "./rollbarService";
1616
import { SemaphoreService } from "./semaphoreService";
@@ -322,7 +322,7 @@ export class PretixSyncService {
322322
(subEvent) =>
323323
({
324324
date_from: subEvent?.date_from,
325-
date_to: subEvent?.date_to,
325+
date_to: subEvent?.date_to
326326
} satisfies DateRange)
327327
);
328328

@@ -331,7 +331,7 @@ export class PretixSyncService {
331331
email: (o.email || o.positions[0].attendee_email).toLowerCase(),
332332
name: o.positions[0].attendee_name,
333333
order_id: o.code,
334-
visitor_date_ranges: visitorDateRanges,
334+
visitor_date_ranges: visitorDateRanges
335335
} satisfies ZuzaluPretixTicket;
336336
});
337337

apps/passport-server/src/services/semaphoreService.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { serializeSemaphoreGroup } from "@pcd/semaphore-group-pcd";
22
import { Group } from "@semaphore-protocol/group";
3-
import { Pool } from "pg";
3+
import { Pool } from "postgres-pool";
44
import {
55
CommitmentRow,
66
HistoricSemaphoreGroup,

apps/passport-server/src/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Application } from "express";
22
import * as http from "http";
33
import Libhoney from "libhoney";
4-
import { Pool } from "pg";
4+
import { Pool } from "postgres-pool";
55
import { IDevconnectPretixAPI } from "./apis/devconnect/devconnectPretixAPI";
66
import { IEmailAPI } from "./apis/emailAPI";
77
import { IPretixAPI } from "./apis/pretixAPI";

apps/passport-server/test/database.spec.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,29 @@ import { Identity } from "@semaphore-protocol/identity";
22
import { expect } from "chai";
33
import "mocha";
44
import { step } from "mocha-steps";
5-
import { Pool } from "pg";
5+
import { Pool } from "postgres-pool";
66
import { ZuzaluPretixTicket, ZuzaluUserRole } from "../src/database/models";
77
import { getDB } from "../src/database/postgresPool";
88
import {
99
fetchAllCommitments,
1010
fetchCommitment,
1111
fetchCommitmentByPublicCommitment,
12-
removeCommitment,
12+
removeCommitment
1313
} from "../src/database/queries/commitments";
1414
import {
1515
fetchEncryptedStorage,
16-
insertEncryptedStorage,
16+
insertEncryptedStorage
1717
} from "../src/database/queries/e2ee";
1818
import {
1919
fetchEmailToken,
20-
insertEmailToken,
20+
insertEmailToken
2121
} from "../src/database/queries/emailToken";
2222
import { insertCommitment } from "../src/database/queries/saveCommitment";
2323
import { deleteZuzaluUser } from "../src/database/queries/zuzalu_pretix_tickets/deleteZuzaluUser";
2424
import {
2525
fetchAllLoggedInZuzaluUsers,
2626
fetchLoggedInZuzaluUser,
27-
fetchZuzaluUser,
27+
fetchZuzaluUser
2828
} from "../src/database/queries/zuzalu_pretix_tickets/fetchZuzaluUser";
2929
import { insertZuzaluPretixTicket } from "../src/database/queries/zuzalu_pretix_tickets/insertZuzaluPretixTicket";
3030
import { updateZuzaluPretixTicket } from "../src/database/queries/zuzalu_pretix_tickets/updateZuzaluPretixTicket";
@@ -71,7 +71,7 @@ describe("database reads and writes", function () {
7171
name: "bob shmob",
7272
order_id: "ASD12",
7373
role: ZuzaluUserRole.Organizer,
74-
visitor_date_ranges: null,
74+
visitor_date_ranges: null
7575
};
7676
otherRole = ZuzaluUserRole.Visitor;
7777

@@ -101,7 +101,7 @@ describe("database reads and writes", function () {
101101
const newCommitment = newIdentity.commitment.toString();
102102
const newUuid = await insertCommitment(db, {
103103
email: testTicket.email,
104-
commitment: newCommitment,
104+
commitment: newCommitment
105105
});
106106

107107
const loggedinUser = await fetchLoggedInZuzaluUser(db, { uuid: newUuid });
@@ -154,8 +154,8 @@ describe("database reads and writes", function () {
154154
email: testTicket.email,
155155
role: otherRole,
156156
visitor_date_ranges: [
157-
{ date_from: new Date().toString(), date_to: new Date().toString() },
158-
],
157+
{ date_from: new Date().toString(), date_to: new Date().toString() }
158+
]
159159
};
160160

161161
await updateZuzaluPretixTicket(db, update);
@@ -220,7 +220,7 @@ describe("database reads and writes", function () {
220220
const commitment = new Identity().commitment.toString();
221221
const uuid = await insertCommitment(db, {
222222
commitment,
223-
email,
223+
email
224224
});
225225
if (!uuid) {
226226
throw new Error("expected to be able to insert a commitment");

apps/passport-server/test/devconnect.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { expect } from "chai";
1616
import _ from "lodash";
1717
import "mocha";
1818
import NodeRSA from "node-rsa";
19-
import { Pool } from "pg";
19+
import { Pool } from "postgres-pool";
2020
import {
2121
DevconnectPretixConfig,
2222
getDevconnectPretixConfig

apps/passport-server/test/devconnectdb.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { expect } from "chai";
22
import "mocha";
33
import { step } from "mocha-steps";
4-
import { Pool } from "pg";
4+
import { Pool } from "postgres-pool";
55
import { v4 as uuid } from "uuid";
66
import {
77
DevconnectPretixTicket,

0 commit comments

Comments
 (0)