You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
860 B
JavaScript
42 lines
860 B
JavaScript
'use strict';
|
|
|
|
const nconf = require('nconf');
|
|
const db = require('../../database');
|
|
|
|
module.exports = {
|
|
name: 'Optimize PostgreSQL sessions',
|
|
timestamp: Date.UTC(2018, 9, 1),
|
|
method: function (callback) {
|
|
if (nconf.get('database') !== 'postgres' || nconf.get('redis')) {
|
|
return callback();
|
|
}
|
|
|
|
db.pool.query(`
|
|
BEGIN TRANSACTION;
|
|
|
|
CREATE TABLE IF NOT EXISTS "session" (
|
|
"sid" CHAR(32) NOT NULL
|
|
COLLATE "C"
|
|
PRIMARY KEY,
|
|
"sess" JSONB NOT NULL,
|
|
"expire" TIMESTAMPTZ NOT NULL
|
|
) WITHOUT OIDS;
|
|
|
|
CREATE INDEX IF NOT EXISTS "session_expire_idx" ON "session"("expire");
|
|
|
|
ALTER TABLE "session"
|
|
ALTER "sid" TYPE CHAR(32) COLLATE "C",
|
|
ALTER "sid" SET STORAGE PLAIN,
|
|
ALTER "sess" TYPE JSONB,
|
|
ALTER "expire" TYPE TIMESTAMPTZ,
|
|
CLUSTER ON "session_expire_idx";
|
|
|
|
CLUSTER "session";
|
|
ANALYZE "session";
|
|
|
|
COMMIT;`, (err) => {
|
|
callback(err);
|
|
});
|
|
},
|
|
};
|