@powersync/service-module-postgres 0.19.3 → 0.19.4
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/api/PostgresRouteAPIAdapter.d.ts +1 -1
- package/dist/api/PostgresRouteAPIAdapter.js +63 -72
- package/dist/api/PostgresRouteAPIAdapter.js.map +1 -1
- package/dist/module/PostgresModule.js.map +1 -1
- package/dist/replication/MissingReplicationSlotError.d.ts +41 -0
- package/dist/replication/MissingReplicationSlotError.js +33 -0
- package/dist/replication/MissingReplicationSlotError.js.map +1 -0
- package/dist/replication/PostgresErrorRateLimiter.js +1 -1
- package/dist/replication/PostgresErrorRateLimiter.js.map +1 -1
- package/dist/replication/SnapshotQuery.js +2 -2
- package/dist/replication/SnapshotQuery.js.map +1 -1
- package/dist/replication/WalStream.d.ts +35 -3
- package/dist/replication/WalStream.js +135 -9
- package/dist/replication/WalStream.js.map +1 -1
- package/dist/replication/WalStreamReplicationJob.js +6 -3
- package/dist/replication/WalStreamReplicationJob.js.map +1 -1
- package/dist/replication/replication-index.d.ts +3 -1
- package/dist/replication/replication-index.js +3 -1
- package/dist/replication/replication-index.js.map +1 -1
- package/dist/replication/replication-utils.d.ts +3 -11
- package/dist/replication/replication-utils.js +101 -164
- package/dist/replication/replication-utils.js.map +1 -1
- package/dist/replication/wal-budget-utils.d.ts +23 -0
- package/dist/replication/wal-budget-utils.js +57 -0
- package/dist/replication/wal-budget-utils.js.map +1 -0
- package/dist/types/registry.js +1 -1
- package/dist/types/registry.js.map +1 -1
- package/package.json +15 -11
- package/sql/check-source-configuration.plpgsql +13 -0
- package/sql/debug-tables-info-batched.plpgsql +230 -0
- package/CHANGELOG.md +0 -858
- package/src/api/PostgresRouteAPIAdapter.ts +0 -356
- package/src/index.ts +0 -1
- package/src/module/PostgresModule.ts +0 -122
- package/src/replication/ConnectionManagerFactory.ts +0 -33
- package/src/replication/PgManager.ts +0 -122
- package/src/replication/PgRelation.ts +0 -41
- package/src/replication/PostgresErrorRateLimiter.ts +0 -48
- package/src/replication/SnapshotQuery.ts +0 -213
- package/src/replication/WalStream.ts +0 -1137
- package/src/replication/WalStreamReplicationJob.ts +0 -138
- package/src/replication/WalStreamReplicator.ts +0 -53
- package/src/replication/replication-index.ts +0 -5
- package/src/replication/replication-utils.ts +0 -398
- package/src/types/registry.ts +0 -275
- package/src/types/resolver.ts +0 -227
- package/src/types/types.ts +0 -44
- package/src/utils/application-name.ts +0 -8
- package/src/utils/migration_lib.ts +0 -80
- package/src/utils/populate_test_data.ts +0 -37
- package/src/utils/populate_test_data_worker.ts +0 -53
- package/src/utils/postgres_version.ts +0 -8
- package/test/src/checkpoints.test.ts +0 -86
- package/test/src/chunked_snapshots.test.ts +0 -161
- package/test/src/env.ts +0 -11
- package/test/src/large_batch.test.ts +0 -241
- package/test/src/pg_test.test.ts +0 -729
- package/test/src/resuming_snapshots.test.ts +0 -160
- package/test/src/route_api_adapter.test.ts +0 -62
- package/test/src/schema_changes.test.ts +0 -655
- package/test/src/setup.ts +0 -12
- package/test/src/slow_tests.test.ts +0 -519
- package/test/src/storage_combination.test.ts +0 -35
- package/test/src/types/registry.test.ts +0 -149
- package/test/src/util.ts +0 -151
- package/test/src/validation.test.ts +0 -63
- package/test/src/wal_stream.test.ts +0 -607
- package/test/src/wal_stream_utils.ts +0 -284
- package/test/tsconfig.json +0 -27
- package/tsconfig.json +0 -34
- package/tsconfig.tsbuildinfo +0 -1
- package/vitest.config.ts +0 -3
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as pgwire from '@powersync/service-jpgwire';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
2
3
|
import * as lib_postgres from '@powersync/lib-service-postgres';
|
|
3
4
|
import { ErrorCode, logger, ServiceAssertionError, ServiceError } from '@powersync/lib-services-framework';
|
|
4
5
|
import { storage } from '@powersync/service-core';
|
|
@@ -76,19 +77,7 @@ WHERE oid = $1::oid LIMIT 1`,
|
|
|
76
77
|
}
|
|
77
78
|
export async function checkSourceConfiguration(db, publicationName) {
|
|
78
79
|
// Check basic config
|
|
79
|
-
await lib_postgres.retriedQuery(db,
|
|
80
|
-
BEGIN
|
|
81
|
-
if current_setting('wal_level') is distinct from 'logical' then
|
|
82
|
-
raise exception 'wal_level must be set to ''logical'', your database has it set to ''%''. Please edit your config file and restart PostgreSQL.', current_setting('wal_level');
|
|
83
|
-
end if;
|
|
84
|
-
if (current_setting('max_replication_slots')::int >= 1) is not true then
|
|
85
|
-
raise exception 'Your max_replication_slots setting is too low, it must be greater than 1. Please edit your config file and restart PostgreSQL.';
|
|
86
|
-
end if;
|
|
87
|
-
if (current_setting('max_wal_senders')::int >= 1) is not true then
|
|
88
|
-
raise exception 'Your max_wal_senders setting is too low, it must be greater than 1. Please edit your config file and restart PostgreSQL.';
|
|
89
|
-
end if;
|
|
90
|
-
end;
|
|
91
|
-
$$ LANGUAGE plpgsql;`);
|
|
80
|
+
await lib_postgres.retriedQuery(db, await getCheckSourceConfigurationSql());
|
|
92
81
|
// Check that publication exists
|
|
93
82
|
const rs = await lib_postgres.retriedQuery(db, {
|
|
94
83
|
statement: `SELECT * FROM pg_publication WHERE pubname = $1`,
|
|
@@ -147,170 +136,118 @@ WHERE c.oid = $1::oid;
|
|
|
147
136
|
}
|
|
148
137
|
return { canRead: true };
|
|
149
138
|
}
|
|
139
|
+
let getDebugTablesInfoBatchedSqlPromise;
|
|
140
|
+
let checkSourceConfigurationSqlPromise;
|
|
141
|
+
function getDebugTablesInfoBatchedSql() {
|
|
142
|
+
return (getDebugTablesInfoBatchedSqlPromise ??= readFile(new URL('../../sql/debug-tables-info-batched.plpgsql', import.meta.url), 'utf8'));
|
|
143
|
+
}
|
|
144
|
+
function getCheckSourceConfigurationSql() {
|
|
145
|
+
return (checkSourceConfigurationSqlPromise ??= readFile(new URL('../../sql/check-source-configuration.plpgsql', import.meta.url), 'utf8'));
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Note: This must use a dedicated connection, not a connection pool.
|
|
149
|
+
*/
|
|
150
150
|
export async function getDebugTablesInfo(options) {
|
|
151
151
|
const { db, publicationName, connectionTag, tablePatterns, syncRules } = options;
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
const relationId = row.relid;
|
|
179
|
-
if (!name.startsWith(prefix)) {
|
|
180
|
-
continue;
|
|
181
|
-
}
|
|
182
|
-
const details = await getDebugTableInfo({
|
|
183
|
-
db,
|
|
184
|
-
name,
|
|
185
|
-
publicationName,
|
|
186
|
-
connectionTag,
|
|
187
|
-
tablePattern,
|
|
188
|
-
relationId,
|
|
189
|
-
syncRules: syncRules
|
|
190
|
-
});
|
|
191
|
-
patternResult.tables.push(details);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
const results = await lib_postgres.retriedQuery(db, {
|
|
196
|
-
statement: `SELECT c.oid AS relid, c.relname AS table_name
|
|
197
|
-
FROM pg_class c
|
|
198
|
-
JOIN pg_namespace n ON n.oid = c.relnamespace
|
|
199
|
-
WHERE n.nspname = $1
|
|
200
|
-
AND c.relkind = 'r'
|
|
201
|
-
AND c.relname = $2`,
|
|
202
|
-
params: [
|
|
203
|
-
{ type: 'varchar', value: schema },
|
|
204
|
-
{ type: 'varchar', value: tablePattern.tablePattern }
|
|
205
|
-
]
|
|
206
|
-
});
|
|
207
|
-
if (results.rows.length == 0) {
|
|
208
|
-
// Table not found
|
|
209
|
-
patternResult.table = await getDebugTableInfo({
|
|
210
|
-
db,
|
|
211
|
-
name: tablePattern.name,
|
|
212
|
-
publicationName,
|
|
213
|
-
connectionTag,
|
|
214
|
-
tablePattern,
|
|
215
|
-
relationId: null,
|
|
216
|
-
syncRules: syncRules
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
const row = pgwire.pgwireRows(results)[0];
|
|
221
|
-
const name = row.table_name;
|
|
222
|
-
const relationId = row.relid;
|
|
223
|
-
patternResult.table = await getDebugTableInfo({
|
|
224
|
-
db,
|
|
225
|
-
name,
|
|
226
|
-
publicationName,
|
|
227
|
-
connectionTag,
|
|
228
|
-
tablePattern,
|
|
229
|
-
relationId,
|
|
230
|
-
syncRules: syncRules
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
}
|
|
152
|
+
const patternPayload = JSON.stringify(tablePatterns.map((tablePattern, pattern_ord) => ({
|
|
153
|
+
pattern_ord,
|
|
154
|
+
schema_name: tablePattern.schema,
|
|
155
|
+
table_pattern: tablePattern.tablePattern,
|
|
156
|
+
is_wildcard: tablePattern.isWildcard,
|
|
157
|
+
table_prefix: tablePattern.isWildcard ? tablePattern.tablePrefix : '',
|
|
158
|
+
input_name: tablePattern.isWildcard ? tablePattern.tablePattern : tablePattern.name
|
|
159
|
+
})));
|
|
160
|
+
let rows;
|
|
161
|
+
await db.query('BEGIN');
|
|
162
|
+
try {
|
|
163
|
+
// Anonymous DO blocks cannot take bind parameters directly, so pass the
|
|
164
|
+
// pattern payload through transaction-local settings on the pinned connection.
|
|
165
|
+
const fetched = await db.query({
|
|
166
|
+
statement: `SELECT set_config('powersync.debug.table_patterns', $1, true)`,
|
|
167
|
+
params: [{ type: 'varchar', value: patternPayload }]
|
|
168
|
+
}, {
|
|
169
|
+
statement: `SELECT set_config('powersync.debug.publication_name', $1, true)`,
|
|
170
|
+
params: [{ type: 'varchar', value: publicationName }]
|
|
171
|
+
}, {
|
|
172
|
+
statement: await getDebugTablesInfoBatchedSql()
|
|
173
|
+
}, {
|
|
174
|
+
statement: `FETCH ALL FROM powersync_debug_tables_cursor`
|
|
175
|
+
});
|
|
176
|
+
rows = pgwire.pgwireRows(fetched);
|
|
177
|
+
await db.query('COMMIT');
|
|
234
178
|
}
|
|
235
|
-
|
|
236
|
-
}
|
|
237
|
-
export async function getDebugTableInfo(options) {
|
|
238
|
-
const { db, name, publicationName, connectionTag, tablePattern, relationId, syncRules } = options;
|
|
239
|
-
const schema = tablePattern.schema;
|
|
240
|
-
let id_columns_result = undefined;
|
|
241
|
-
let id_columns_error = null;
|
|
242
|
-
if (relationId != null) {
|
|
179
|
+
catch (e) {
|
|
243
180
|
try {
|
|
244
|
-
|
|
181
|
+
await db.query('ROLLBACK');
|
|
245
182
|
}
|
|
246
|
-
catch
|
|
247
|
-
|
|
183
|
+
catch {
|
|
184
|
+
// Ignore rollback errors after a failed transaction.
|
|
248
185
|
}
|
|
186
|
+
throw e;
|
|
249
187
|
}
|
|
250
|
-
const
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
188
|
+
const result = tablePatterns.map((tablePattern) => ({
|
|
189
|
+
schema: tablePattern.schema,
|
|
190
|
+
pattern: tablePattern.tablePattern,
|
|
191
|
+
wildcard: tablePattern.isWildcard,
|
|
192
|
+
...(tablePattern.isWildcard ? { tables: [] } : {})
|
|
193
|
+
}));
|
|
194
|
+
for (const row of rows) {
|
|
195
|
+
const tablePattern = tablePatterns[row.pattern_ord];
|
|
196
|
+
const idColumns = JSON.parse(row.replication_id_json);
|
|
197
|
+
const sourceTable = new storage.SourceTable({
|
|
198
|
+
id: '',
|
|
199
|
+
connectionTag,
|
|
200
|
+
objectId: row.relation_id ?? 0,
|
|
201
|
+
schema: tablePattern.schema,
|
|
202
|
+
name: row.name,
|
|
203
|
+
replicaIdColumns: idColumns.map((name) => ({ name })),
|
|
204
|
+
snapshotComplete: true
|
|
205
|
+
});
|
|
206
|
+
const syncData = syncRules.tableSyncsData(sourceTable);
|
|
207
|
+
const syncParameters = syncRules.tableSyncsParameters(sourceTable);
|
|
208
|
+
let errors;
|
|
209
|
+
if (row.relation_id == null) {
|
|
210
|
+
errors = [{ level: 'warning', message: `Table ${sourceTable.qualifiedName} not found.` }];
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
const idColumnsError = idColumns.length == 0 && row.replication_identity != 'nothing'
|
|
214
|
+
? {
|
|
215
|
+
level: 'fatal',
|
|
216
|
+
message: `No replication id found for ${sourceTable.qualifiedName}. Replica identity: ${row.replication_identity}.${row.replication_identity == 'default' ? ' Configure a primary key on the table.' : ''}`
|
|
217
|
+
}
|
|
218
|
+
: null;
|
|
219
|
+
const selectError = row.select_error == null ? null : { level: 'fatal', message: row.select_error };
|
|
220
|
+
const replicateError = row.in_publication === false
|
|
221
|
+
? {
|
|
222
|
+
level: 'fatal',
|
|
223
|
+
message: `Table ${sourceTable.qualifiedName} is not part of publication '${publicationName}'. Run: \`ALTER PUBLICATION ${publicationName} ADD TABLE ${sourceTable.qualifiedName}\`.`
|
|
224
|
+
}
|
|
225
|
+
: null;
|
|
226
|
+
const rlsError = row.rls_enabled && !row.is_superuser && !row.bypasses_rls && row.username != null
|
|
227
|
+
? {
|
|
228
|
+
level: 'warning',
|
|
229
|
+
message: `[${ErrorCode.PSYNC_S1145}] Row Level Security is enabled on table "${row.name}". To make sure that ${row.username} can read the table, run: 'ALTER ROLE ${row.username} BYPASSRLS'.`
|
|
230
|
+
}
|
|
231
|
+
: null;
|
|
232
|
+
errors = [idColumnsError, selectError, replicateError, rlsError].filter((error) => error != null);
|
|
233
|
+
}
|
|
234
|
+
const tableInfo = {
|
|
235
|
+
schema: tablePattern.schema,
|
|
236
|
+
name: row.name,
|
|
266
237
|
pattern: tablePattern.isWildcard ? tablePattern.tablePattern : undefined,
|
|
267
|
-
replication_id:
|
|
238
|
+
replication_id: idColumns,
|
|
268
239
|
data_queries: syncData,
|
|
269
240
|
parameter_queries: syncParameters,
|
|
270
|
-
|
|
271
|
-
errors: [{ level: 'warning', message: `Table ${sourceTable.qualifiedName} not found.` }]
|
|
241
|
+
errors
|
|
272
242
|
};
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
243
|
+
if (tablePattern.isWildcard) {
|
|
244
|
+
result[row.pattern_ord].tables.push(tableInfo);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
result[row.pattern_ord].table = tableInfo;
|
|
278
248
|
}
|
|
279
|
-
id_columns_error = { level: 'fatal', message };
|
|
280
|
-
}
|
|
281
|
-
let selectError = null;
|
|
282
|
-
try {
|
|
283
|
-
await lib_postgres.retriedQuery(db, `SELECT * FROM ${sourceTable.qualifiedName} LIMIT 1`);
|
|
284
|
-
}
|
|
285
|
-
catch (e) {
|
|
286
|
-
selectError = { level: 'fatal', message: e.message };
|
|
287
|
-
}
|
|
288
|
-
let replicateError = null;
|
|
289
|
-
const publications = await lib_postgres.retriedQuery(db, {
|
|
290
|
-
statement: `SELECT tablename FROM pg_publication_tables WHERE pubname = $1 AND schemaname = $2 AND tablename = $3`,
|
|
291
|
-
params: [
|
|
292
|
-
{ type: 'varchar', value: publicationName },
|
|
293
|
-
{ type: 'varchar', value: tablePattern.schema },
|
|
294
|
-
{ type: 'varchar', value: name }
|
|
295
|
-
]
|
|
296
|
-
});
|
|
297
|
-
if (publications.rows.length == 0) {
|
|
298
|
-
replicateError = {
|
|
299
|
-
level: 'fatal',
|
|
300
|
-
message: `Table ${sourceTable.qualifiedName} is not part of publication '${publicationName}'. Run: \`ALTER PUBLICATION ${publicationName} ADD TABLE ${sourceTable.qualifiedName}\`.`
|
|
301
|
-
};
|
|
302
249
|
}
|
|
303
|
-
|
|
304
|
-
const rlsError = rlsCheck.canRead ? null : { message: rlsCheck.message, level: 'warning' };
|
|
305
|
-
return {
|
|
306
|
-
schema: schema,
|
|
307
|
-
name: name,
|
|
308
|
-
pattern: tablePattern.isWildcard ? tablePattern.tablePattern : undefined,
|
|
309
|
-
replication_id: id_columns.map((c) => c.name),
|
|
310
|
-
data_queries: syncData,
|
|
311
|
-
parameter_queries: syncParameters,
|
|
312
|
-
errors: [id_columns_error, selectError, replicateError, rlsError].filter((error) => error != null)
|
|
313
|
-
};
|
|
250
|
+
return result;
|
|
314
251
|
}
|
|
315
252
|
export async function cleanUpReplicationSlot(slotName, db) {
|
|
316
253
|
logger.info(`Cleaning up Postgres replication slot: ${slotName}...`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replication-utils.js","sourceRoot":"","sources":["../../src/replication/replication-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"replication-utils.js","sourceRoot":"","sources":["../../src/replication/replication-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare function formatBytes(bytes: number): string;
|
|
2
|
+
export declare function formatDuration(hours: number): string;
|
|
3
|
+
export interface WalBudgetSample {
|
|
4
|
+
safeWalSize: number;
|
|
5
|
+
timestamp: number;
|
|
6
|
+
}
|
|
7
|
+
export interface WalBudgetReport {
|
|
8
|
+
budgetRemainingPct: number;
|
|
9
|
+
safeWalSize: number;
|
|
10
|
+
maxSize: number;
|
|
11
|
+
walStatus: string;
|
|
12
|
+
ratePerHour: number | null;
|
|
13
|
+
etaHours: number | null;
|
|
14
|
+
isWarning: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function computeWalBudgetReport(opts: {
|
|
17
|
+
safeWalSize: number;
|
|
18
|
+
maxSize: number;
|
|
19
|
+
walStatus: string;
|
|
20
|
+
prevSample: WalBudgetSample | null;
|
|
21
|
+
now: number;
|
|
22
|
+
}): WalBudgetReport;
|
|
23
|
+
export declare function formatWalBudgetLine(report: WalBudgetReport): string;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export function formatBytes(bytes) {
|
|
2
|
+
if (bytes >= 1024 * 1024 * 1024) {
|
|
3
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)}GB`;
|
|
4
|
+
}
|
|
5
|
+
else if (bytes >= 1024 * 1024) {
|
|
6
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
7
|
+
}
|
|
8
|
+
else if (bytes >= 1024) {
|
|
9
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
10
|
+
}
|
|
11
|
+
return `${bytes}B`;
|
|
12
|
+
}
|
|
13
|
+
export function formatDuration(hours) {
|
|
14
|
+
if (hours >= 24) {
|
|
15
|
+
return `${(hours / 24).toFixed(1)} days`;
|
|
16
|
+
}
|
|
17
|
+
else if (hours >= 1) {
|
|
18
|
+
return `${hours.toFixed(1)} hours`;
|
|
19
|
+
}
|
|
20
|
+
return `${Math.round(hours * 60)} minutes`;
|
|
21
|
+
}
|
|
22
|
+
export function computeWalBudgetReport(opts) {
|
|
23
|
+
const budgetRemainingPct = Math.round((opts.safeWalSize / opts.maxSize) * 100);
|
|
24
|
+
let ratePerHour = null;
|
|
25
|
+
let etaHours = null;
|
|
26
|
+
if (opts.prevSample != null) {
|
|
27
|
+
const elapsedMs = opts.now - opts.prevSample.timestamp;
|
|
28
|
+
const consumed = opts.prevSample.safeWalSize - opts.safeWalSize;
|
|
29
|
+
if (elapsedMs > 0 && consumed > 0) {
|
|
30
|
+
ratePerHour = (consumed / elapsedMs) * 3_600_000;
|
|
31
|
+
const eta = opts.safeWalSize / ratePerHour;
|
|
32
|
+
etaHours = eta < 48 ? eta : null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
budgetRemainingPct,
|
|
37
|
+
safeWalSize: opts.safeWalSize,
|
|
38
|
+
maxSize: opts.maxSize,
|
|
39
|
+
walStatus: opts.walStatus,
|
|
40
|
+
ratePerHour,
|
|
41
|
+
etaHours,
|
|
42
|
+
isWarning: budgetRemainingPct <= 50
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function formatWalBudgetLine(report) {
|
|
46
|
+
let line = `WAL budget: ${formatBytes(report.safeWalSize)} remaining of ` +
|
|
47
|
+
`${formatBytes(report.maxSize)} limit (${report.budgetRemainingPct}% remaining).`;
|
|
48
|
+
if (report.ratePerHour != null) {
|
|
49
|
+
line += ` WAL consumption: ~${formatBytes(report.ratePerHour)}/hr.`;
|
|
50
|
+
if (report.etaHours != null) {
|
|
51
|
+
line += ` ETA to exhaustion: ~${formatDuration(report.etaHours)}.`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
line += ` Slot status: ${report.walStatus}.`;
|
|
55
|
+
return line;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=wal-budget-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wal-budget-utils.js","sourceRoot":"","sources":["../../src/replication/wal-budget-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/types/registry.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { applyValueContext, CompatibilityOption, CustomSqliteValue, toSyncRulesValue } from '@powersync/service-sync-rules';
|
|
2
1
|
import * as pgwire from '@powersync/service-jpgwire';
|
|
2
|
+
import { applyValueContext, CompatibilityOption, CustomSqliteValue, toSyncRulesValue } from '@powersync/service-sync-rules';
|
|
3
3
|
const UNKNOWN_TYPE = {
|
|
4
4
|
type: 'unknown',
|
|
5
5
|
sqliteType: () => 'text'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/types/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,mBAAmB,EACnB,iBAAiB,EAIjB,gBAAgB,EACjB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/types/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,10 +5,14 @@
|
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
|
-
"version": "0.19.
|
|
8
|
+
"version": "0.19.4",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"license": "FSL-1.1-ALv2",
|
|
11
11
|
"type": "module",
|
|
12
|
+
"files": [
|
|
13
|
+
"dist/**/*",
|
|
14
|
+
"sql/**/*"
|
|
15
|
+
],
|
|
12
16
|
"exports": {
|
|
13
17
|
".": {
|
|
14
18
|
"import": "./dist/index.js",
|
|
@@ -25,20 +29,20 @@
|
|
|
25
29
|
"semver": "^7.5.4",
|
|
26
30
|
"ts-codec": "^1.3.0",
|
|
27
31
|
"uuid": "^11.1.0",
|
|
28
|
-
"@powersync/lib-service-postgres": "0.4.
|
|
29
|
-
"@powersync/lib-services-framework": "0.9.
|
|
30
|
-
"@powersync/service-core": "1.20.
|
|
31
|
-
"@powersync/service-jpgwire": "0.21.
|
|
32
|
+
"@powersync/lib-service-postgres": "0.4.26",
|
|
33
|
+
"@powersync/lib-services-framework": "0.9.3",
|
|
34
|
+
"@powersync/service-core": "1.20.5",
|
|
35
|
+
"@powersync/service-jpgwire": "0.21.17",
|
|
32
36
|
"@powersync/service-jsonbig": "0.17.12",
|
|
33
|
-
"@powersync/service-sync-rules": "0.
|
|
34
|
-
"@powersync/service-types": "0.15.
|
|
37
|
+
"@powersync/service-sync-rules": "0.35.0",
|
|
38
|
+
"@powersync/service-types": "0.15.1"
|
|
35
39
|
},
|
|
36
40
|
"devDependencies": {
|
|
37
41
|
"@types/semver": "^7.5.4",
|
|
38
|
-
"@powersync/lib-service-postgres": "0.4.
|
|
39
|
-
"@powersync/service-core-tests": "0.15.
|
|
40
|
-
"@powersync/service-module-mongodb-storage": "0.15.
|
|
41
|
-
"@powersync/service-module-postgres-storage": "0.13.
|
|
42
|
+
"@powersync/lib-service-postgres": "0.4.26",
|
|
43
|
+
"@powersync/service-core-tests": "0.15.4",
|
|
44
|
+
"@powersync/service-module-mongodb-storage": "0.15.4",
|
|
45
|
+
"@powersync/service-module-postgres-storage": "0.13.4"
|
|
42
46
|
},
|
|
43
47
|
"scripts": {
|
|
44
48
|
"build": "tsc -b",
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
DO $$
|
|
2
|
+
BEGIN
|
|
3
|
+
if current_setting('wal_level') is distinct from 'logical' then
|
|
4
|
+
raise exception 'wal_level must be set to ''logical'', your database has it set to ''%''. Please edit your config file and restart PostgreSQL.', current_setting('wal_level');
|
|
5
|
+
end if;
|
|
6
|
+
if (current_setting('max_replication_slots')::int >= 1) is not true then
|
|
7
|
+
raise exception 'Your max_replication_slots setting is too low, it must be greater than 1. Please edit your config file and restart PostgreSQL.';
|
|
8
|
+
end if;
|
|
9
|
+
if (current_setting('max_wal_senders')::int >= 1) is not true then
|
|
10
|
+
raise exception 'Your max_wal_senders setting is too low, it must be greater than 1. Please edit your config file and restart PostgreSQL.';
|
|
11
|
+
end if;
|
|
12
|
+
end;
|
|
13
|
+
$$ LANGUAGE plpgsql;
|