@travetto/model-postgres
v8.0.8
Published
PostgreSQL backing for the travetto model module, with real-time modeling support for SQL schemas.
Maintainers
Readme
PostgreSQL Model Service
PostgreSQL backing for the travetto model module, with real-time modeling support for SQL schemas.
Install: @travetto/model-postgres
npm install @travetto/model-postgres
# or
yarn add @travetto/model-postgresThis module provides a Postgres-based implementation for the Data Modeling Support module. This source allows the Data Modeling Support module to read, write and query against SQL databases. In development mode, the PostgresModelService will also modify the database schema in real time to minimize impact to development.
The schema generated will not generally map to existing tables as it is attempting to produce a document store like experience on top of a SQL database. Every table generated maps to a model:
- Simple scalar fields map directly to individual native PostgreSQL columns (e.g.,
VARCHAR,INTEGER,TIMESTAMP). - Simple scalar arrays (such as
string[],number[], orboolean[]) map directly to PostgreSQL native array columns (e.g.,VARCHAR[],INTEGER[]). - Complex fields and arrays of sub-schema objects map to native
JSONBcolumns.
Supported features:
Out of the box, by installing the module, everything should be wired up by default.If you need to customize any aspect of the source or config, you can override and register it with the Dependency Injection module.
Code: Wiring up a custom Model Source
import { InjectableFactory } from '@travetto/di';
import { type PostgresConnection, PostgresModelService } from '@travetto/model-postgres';
export class Init {
@InjectableFactory({ primary: true })
static getModelService(connection: PostgresConnection) {
return new PostgresModelService(connection);
}
}where the PostgresModelConfig is defined by:
Code: Structure of PostgresModelConfig
@Config('model.postgres')
export class PostgresModelConfig {
/**
* Database host to connect to
*/
host = '127.0.0.1';
/**
* Database port to connect to
*/
port = 0;
/**
* Database username
*/
user = Runtime.production ? '' : 'travetto';
/**
* Database password
*/
password = Runtime.production ? '' : 'travetto';
/**
* Namespace/schema prefix for table names
*/
namespace = '';
/**
* Database name
*/
database = 'app';
/**
* Allow storage modifications (like table auto-creation and schema updates) at runtime
*/
modifyStorage = !Runtime.production;
/**
* Client specific overrides
*/
options?: PG.ClientConfig;
}Additionally, you can see that the class is registered with the @Config annotation, and so these values can be overridden using the standard Configuration resolution paths.
