I was searching the documentation of pg-promise specifically in the creation of the client. But I wasn't able to find the option to set the default schema to be used in the connection, it always uses public
schema. How do I set it?
Asked
Active
Viewed 4,553 times
2

vitaly-t
- 24,279
- 15
- 116
- 138

Emmanuel Campos
- 652
- 1
- 9
- 24
-
1Default schema is controlled by the server, not by the client, i.e. the library doesn't use `public` by default, it uses whatever is set as the default on the server. – vitaly-t Jan 18 '17 at 23:13
-
Also see this: http://stackoverflow.com/questions/2875610/permanently-set-postgresql-schema-path – vitaly-t Jan 18 '17 at 23:20
-
2You can set the schema search path at the user level: see answer [http://stackoverflow.com/questions/2951875/postgresql-how-do-i-set-the-search-path-at-the-user-level](http://stackoverflow.com/questions/2951875/postgresql-how-do-i-set-the-search-path-at-the-user-level) – Tim Child Jan 18 '17 at 23:27
-
Ah that's why it's not in the connection parameters. Ok thank you. The link you sent me was really helpful also.So my solution was to set the schema on server start using the SET search_path query. – Emmanuel Campos Jan 18 '17 at 23:28
-
Alternatively, you can have the library inject the schema name automatically. See [pg-promise-demo](https://github.com/vitaly-t/pg-promise-demo). – vitaly-t Jan 18 '17 at 23:32
1 Answers
7
Normally, one sets the default schema(s) for the database or the role, as explained here:
It is only if you want to do so without persisting the change, you might want to set the schema(s) dynamically, just for the current process.
The library supports option schema
within Initialization Options:
const initOptions = {
schema: 'my_schema' /* can also be an array of strings or a callback */
};
const pgp = require('pg-promise')(initOptions);
making it easier to set the dynamic schema(s).
Examples
Making your own schema visible along with the default
public
schema:const initOptions = { schema: ['public', 'my_schema'] /* make both schemas visible */ }; const pgp = require('pg-promise')(initOptions);
Using the callback to set schema based on the Database Context (see Database constructor):
const initOptions = { schema(dc) { if(dc === /* whatever Database Context was used */) { return 'my_schema'; /* or an array of strings */ } /* other provisions, if multiple databases are used. */ /* can return null/undefined, if no schema change is needed. */ } }; const pgp = require('pg-promise')(initOptions);

vitaly-t
- 24,279
- 15
- 116
- 138
-
1Removed examples with the obsolete manual approach, for simplicity, and to avoid confusion. The new option `schema` should be used only. – vitaly-t Oct 21 '19 at 21:30