diff --git a/spec/PostgresInitOptions.spec.js b/spec/PostgresInitOptions.spec.js new file mode 100644 index 0000000000..825eacaf04 --- /dev/null +++ b/spec/PostgresInitOptions.spec.js @@ -0,0 +1,60 @@ +const Parse = require('parse/node').Parse; +const PostgresStorageAdapter = require('../src/Adapters/Storage/Postgres/PostgresStorageAdapter'); +const postgresURI = 'postgres://localhost:5432/parse_server_postgres_adapter_test_database'; + +//public schema +const databaseOptions1 = { + initOptions: { + connect: function (client, dc, isFresh) { + if (isFresh) { + client.query('SET search_path = public'); + } + } + } +}; + +//not exists schema +const databaseOptions2 = { + initOptions: { + connect: function (client, dc, isFresh) { + if (isFresh) { + client.query('SET search_path = not_exists_schema'); + } + } + } +}; + +const GameScore = Parse.Object.extend({ + className: "GameScore" +}); + +describe('Postgres database init options', () => { + it('create server with public schema databaseOptions,shoud be ok', (done) => { + reconfigureServer({ + databaseAdapter: new PostgresStorageAdapter({ + uri: postgresURI, collectionPrefix: 'test_', + databaseOptions: databaseOptions1 + }) + }).then(done, fail); + }); + + it("save new GameScore in public schema", function (done) { + var score = new GameScore({ "score": 1337, "playerName": "Sean Plott", "cheatMode": false }); + score.save().then(done, fail); + }); + + it('create server with not exists schema databaseOptions,shoud be fail', (done) => { + reconfigureServer({ + databaseAdapter: new PostgresStorageAdapter({ + uri: postgresURI, collectionPrefix: 'test_', + databaseOptions: databaseOptions2 + }) + }).then(() => { + done(); + }) + .catch(error => { + expect(error.code).toEqual('42P01'); + done(); + }); + }); +}); diff --git a/src/Adapters/Storage/Postgres/PostgresClient.js b/src/Adapters/Storage/Postgres/PostgresClient.js index 0f4b3c8d52..a94eb9c29d 100644 --- a/src/Adapters/Storage/Postgres/PostgresClient.js +++ b/src/Adapters/Storage/Postgres/PostgresClient.js @@ -1,4 +1,4 @@ -const pgp = require('pg-promise')(); + const parser = require('./PostgresConfigParser'); export function createClient(uri, databaseOptions) { @@ -13,11 +13,13 @@ export function createClient(uri, databaseOptions) { dbOptions[key] = databaseOptions[key]; } + const initOptions = dbOptions.initOptions || {}; + const pgp = require('pg-promise')(initOptions); const client = pgp(dbOptions); if (dbOptions.pgOptions) { for (const key in dbOptions.pgOptions) { - client.pg.defaults[key] = dbOptions.pgOptions[key]; + pgp.pg.defaults[key] = dbOptions.pgOptions[key]; } } diff --git a/{ b/{ new file mode 100644 index 0000000000..e69de29bb2