Browse Source
Merge pull request #3178 from Budibase/postgres-schema
Postgres: Use another schema other than 'public'
master
Rory Powell
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
25 additions and
2 deletions
-
packages/server/__mocks__/pg.ts
-
packages/server/src/integrations/postgres.ts
-
packages/server/src/integrations/tests/postgres.spec.js
|
|
|
@ -21,15 +21,18 @@ module PgMock { |
|
|
|
function Pool() { |
|
|
|
} |
|
|
|
|
|
|
|
const on = jest.fn() |
|
|
|
Pool.prototype.query = query |
|
|
|
Pool.prototype.connect = jest.fn(() => { |
|
|
|
// @ts-ignore
|
|
|
|
return new Client() |
|
|
|
}) |
|
|
|
Pool.prototype.on = on |
|
|
|
|
|
|
|
pg.Client = Client |
|
|
|
pg.Pool = Pool |
|
|
|
pg.queryMock = query |
|
|
|
pg.on = on |
|
|
|
|
|
|
|
module.exports = pg |
|
|
|
} |
|
|
|
|
|
|
|
@ -28,6 +28,7 @@ module PostgresModule { |
|
|
|
database: string |
|
|
|
user: string |
|
|
|
password: string |
|
|
|
schema: string |
|
|
|
ssl?: boolean |
|
|
|
ca?: string |
|
|
|
rejectUnauthorized?: boolean |
|
|
|
@ -65,6 +66,11 @@ module PostgresModule { |
|
|
|
default: "root", |
|
|
|
required: true, |
|
|
|
}, |
|
|
|
schema: { |
|
|
|
type: DatasourceFieldTypes.STRING, |
|
|
|
default: "public", |
|
|
|
required: true, |
|
|
|
}, |
|
|
|
ssl: { |
|
|
|
type: DatasourceFieldTypes.BOOLEAN, |
|
|
|
default: false, |
|
|
|
@ -124,8 +130,7 @@ module PostgresModule { |
|
|
|
public tables: Record<string, Table> = {} |
|
|
|
public schemaErrors: Record<string, string> = {} |
|
|
|
|
|
|
|
COLUMNS_SQL = |
|
|
|
"select * from information_schema.columns where not table_schema = 'information_schema' and not table_schema = 'pg_catalog'" |
|
|
|
COLUMNS_SQL!: string |
|
|
|
|
|
|
|
PRIMARY_KEYS_SQL = ` |
|
|
|
select tc.table_schema, tc.table_name, kc.column_name as primary_key |
|
|
|
@ -155,6 +160,17 @@ module PostgresModule { |
|
|
|
} |
|
|
|
|
|
|
|
this.client = this.pool |
|
|
|
this.setSchema() |
|
|
|
} |
|
|
|
|
|
|
|
setSchema() { |
|
|
|
if (!this.config.schema) { |
|
|
|
this.config.schema = 'public' |
|
|
|
} |
|
|
|
this.client.on('connect', (client: any) => { |
|
|
|
client.query(`SET search_path TO ${this.config.schema}`); |
|
|
|
}); |
|
|
|
this.COLUMNS_SQL = `select * from information_schema.columns where table_schema = '${this.config.schema}'` |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
@ -15,6 +15,10 @@ describe("Postgres Integration", () => { |
|
|
|
config = new TestConfiguration() |
|
|
|
}) |
|
|
|
|
|
|
|
it("calls the connection callback", async () => { |
|
|
|
expect(pg.on).toHaveBeenCalledWith('connect', expect.anything()) |
|
|
|
}) |
|
|
|
|
|
|
|
it("calls the create method with the correct params", async () => { |
|
|
|
const sql = "insert into users (name, age) values ('Joe', 123);" |
|
|
|
await config.integration.create({ |
|
|
|
|