diff --git a/src/languages/postgresql/postgresql.formatter.ts b/src/languages/postgresql/postgresql.formatter.ts index 08697d088e..d3d8a51fd2 100644 --- a/src/languages/postgresql/postgresql.formatter.ts +++ b/src/languages/postgresql/postgresql.formatter.ts @@ -286,6 +286,8 @@ export const postgresql: DialectOptions = { reservedDataTypes: dataTypes, reservedFunctionNames: functions, nestedBlockComments: true, + // Preserve pg_dump safety guards as opaque lines. + lineCommentTypes: ['--', '\\restrict ', '\\unrestrict '], extraParens: ['[]'], underscoresInNumbers: true, stringTypes: [ diff --git a/test/postgresql.test.ts b/test/postgresql.test.ts index 4542d364a2..3a55a2c32f 100644 --- a/test/postgresql.test.ts +++ b/test/postgresql.test.ts @@ -148,6 +148,20 @@ describe('PostgreSqlFormatter', () => { supportsLimiting(format, { limit: true, offset: true, fetchFirst: true, fetchNext: true }); supportsDataTypeCase(format); + it('preserves pg_dump restrict commands', () => { + const result = format( + '\\restrict AbC123\ncreate table widgets(id integer);\n\\unrestrict AbC123' + ); + + expect(result).toBe(dedent` + \\restrict AbC123 + create table widgets (id integer); + + \\unrestrict AbC123 + `); + expect(format(result)).toBe(result); + }); + // Regression test for issue #624 it('supports array slice operator', () => { expect(format('SELECT foo[:5], bar[1:], baz[1:5], zap[:];')).toBe(dedent`