This repository has been archived on 2025-10-29. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2021-06-06 20:25:14 +02:00

115 lines
2.7 KiB
JavaScript
Executable File

const _ = require('lodash');
const fs = require('fs');
const util = require('../../core/util.js');
const config = util.getConfig();
const dirs = util.dirs();
const log = require(util.dirs().core + 'log');
const postgresUtil = require('./util');
const adapter = config.postgresql;
// verify the correct dependencies are installed
const pluginHelper = require(dirs.core + 'pluginUtil');
const pluginMock = {
slug: 'postgresql adapter',
dependencies: config.postgresql.dependencies
}
const cannotLoad = pluginHelper.cannotLoad(pluginMock);
if(cannotLoad) {
util.die(cannotLoad);
}
const pg = require('pg');
const version = adapter.version;
const dbName = postgresUtil.database();
const mode = util.gekkoMode();
const connectionString = config.postgresql.connectionString;
const checkClient = new pg.Pool({
connectionString: connectionString + '/postgres',
});
const pool = new pg.Pool({
connectionString: connectionString + '/' + dbName,
});
// We need to check if the db exists first.
// This requires connecting to the default
// postgres database first. Your postgres
// user will need appropriate rights.
checkClient.connect((err, client, done) => {
if(err) {
util.die(err);
}
log.debug("Check database exists: " + dbName);
client.query("select count(*) from pg_catalog.pg_database where datname = $1", [dbName],
(err, res) => {
if(err) {
util.die(err);
}
if(res.rows[0].count !== '0') {
// database exists
log.debug("Database exists: " + dbName);
log.debug("Postgres connection pool is ready, db " + dbName);
upsertTables();
done();
return;
}
// database dot NOT exist
if(mode === 'backtest') {
// no point in trying to backtest with
// non existing data.
util.die(`History does not exist for exchange ${config.watch.exchange}.`);
}
createDatabase(client, done);
});
});
const createDatabase = (client, done) => {
client.query("CREATE DATABASE " + dbName, err => {
if(err) {
util.die(err);
}
log.debug("Postgres connection pool is ready, db " + dbName);
done();
upsertTables();
});
}
const upsertTables = () => {
const upsertQuery =
`CREATE TABLE IF NOT EXISTS
${postgresUtil.table('candles')} (
id BIGSERIAL PRIMARY KEY,
start integer UNIQUE,
open double precision NOT NULL,
high double precision NOT NULL,
low double precision NOT NULL,
close double precision NOT NULL,
vwp double precision NOT NULL,
volume double precision NOT NULL,
trades INTEGER NOT NULL
);`;
pool.query(upsertQuery, (err) => {
if(err) {
util.die(err);
}
});
}
module.exports = pool;