【问题标题】:Hobby tier hobby-dev postgres on Heroku data vanishes after a whileHeroku 数据上的 Hobby tier hobby-dev postgres 在一段时间后消失了
【发布时间】:2015-08-28 21:55:04
【问题描述】:

我使用 node.js 编写了一个游戏,我使用 Postgres 包用于名为 pg 的节点。 我插入数据库的所有内容都有效。也可以检索插入的数据。重启测功机后数据依然存在。

插入的数据不超过几行。

但是过了一天左右,插入的数据在表中就不存在了。我阅读了 Heroku 文档,但找不到它发生的原因。

怎么了?

我正在使用 Heroku 的免费层和 Postgres 的爱好开发计划。

编辑:

我的数据库代码如下:

// I need to delete the rows from the database which are one day old, one week old and the third table not at all old
var flushTable = function(tableName, dateObj, callback) {
    var client = null, query = null;
    var strDate = getDateString(dateObj);
    client = new pg.Client(connectionString);
    client.connect();
    query = client.query('DELETE FROM '+tableName+' WHERE latest_date<TO_DATE(\''+strDate+'\',\'YYYY-MM-DD\');', function(err, result) {
        if(err) {
            console.log(err);
            client.end();
            return;
        }
        client.end();
        callback();
    });
};
var createNonExistent = function(tableName, callback) {
    var client = null, query = null;
    client = new pg.Client(connectionString);
    client.connect();
    query = client.query('CREATE TABLE IF NOT EXISTS  '+tableName+' (username VARCHAR(16) PRIMARY KEY NOT NULL, score INTEGER NOT NULL, latest_date DATE NOT NULL, latest_time TIME NOT NULL, ip VARCHAR(30) NOT NULL);', function(err, result) {
        if (err) {
            console.log(err);
            client.end();
            return;
        }
        console.log('Table Created');
        client.end();
        callback();
    });
}
var readFromTable = function(tableName, callback) {
    flushTable(tableName, new Date(), function(){
        var client = null, query = null;
        client = new pg.Client(connectionString);
        client.connect();
        query = client.query('SELECT * FROM '+tableName+' ORDER BY score DESC, latest_date DESC, latest_time DESC;', function(err, result){
            if(err) {
                console.log(err);
                client.end();
                return;
            }
            console.log('Read values');
            console.log(result.rows);
            client.end();
            callback(result);
        });
    });
};

【问题讨论】:

    标签: node.js postgresql heroku


    【解决方案1】:

    我发现了错误,我没有更改代码中的日期,所以我添加了另一个名为 flushAll() 的函数,并在读写之前调用了它。

    flushAll() 函数可以正确删除表,这与 readTable() 函数中的删除不同。

    这是修改后的代码:

    var flushTable = function(tableName, dateObj, callback) {
        var client = null, query = null;
        var strDate = getDateString(dateObj);
        client = new pg.Client(connectionString);
        client.connect();
        query = client.query('DELETE FROM '+tableName+' WHERE latest_date<TO_DATE(\''+strDate+'\',\'YYYY-MM-DD\');', function(err, result) {
            if(err) {
                console.log(err);
                client.end();
                return;
            }
            client.end();
            callback();
        });
    };
    var createNonExistent = function(tableName, callback) {
        var client = null, query = null;
        client = new pg.Client(connectionString);
        client.connect();
        query = client.query('CREATE TABLE IF NOT EXISTS  '+tableName+' (username VARCHAR(16) PRIMARY KEY NOT NULL, score INTEGER NOT NULL, latest_date DATE NOT NULL, latest_time TIME NOT NULL, ip VARCHAR(30) NOT NULL);', function(err, result) {
            if (err) {
                console.log(err);
                client.end();
                return;
            }
            console.log('Table Created');
            client.end();
            callback();
        });
    }
    var flushAll = function(callback) {
        flushTable('today',new Date(), function(){
            var dateObj = new Date();
            var strDate = getDateString(dateObj);
            while (dateObj.getDay() != 0) {
                dateObj.setDate(dateObj.getDate()-1);
            }
            flushTable('thisweek',new Date(), function(){
                callback();     
            });
        });
    }
    var readFromTable = function(tableName, callback) {
        var client = null, query = null;
        client = new pg.Client(connectionString);
        client.connect();
        query = client.query('SELECT * FROM '+tableName+' ORDER BY score DESC, latest_date DESC, latest_time DESC;', function(err, result) {
            if(err) {
                console.log(err);
                client.end();
                return;
            }
            console.log('Read values');
            console.log(result.rows);
            client.end();
            callback(result);
        });
    };
    exports.readLeaderBoards = function(callback) {
        var boards = [];
        flushAll(function(){
            createNonExistent('alltime', function(){
                createNonExistent('thisweek', function(){
                    createNonExistent('today', function(){
                        readFromTable('today', function(result) {
                            boards['today'] = result.rows;
                            readFromTable('thisweek', function(result) {
                                boards['thisweek'] = result.rows;
                                readFromTable('alltime', function(result) {
                                    boards['alltime'] = result.rows;
                                    console.log(boards['today']);
                                    callback(boards);
                                });
                            });
                        });
                    });
                });
            });
        });
    };
    

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 2019-03-14
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多