是否可以将Sequelize与Redshift一起使用?如果没有,有哪些替代方案?我需要一个内置的事务支持Node.js的ORM,因此Sails.js不是一个选项。我也看了Bookshelf,但也找不到任何对Redshift的支持。
答案 0 :(得分:6)
我已经能够通过这些选项让Sequelize至少连接到Redshift(并进行简单的SELECT查询):
var Sequelize = require('sequelize');
Sequelize.HSTORE.types.postgres.oids.push('dummy'); // avoid auto-detection and typarray/pg_type error
module.exports = new Sequelize(process.env.REDSHIFT_DATABASE, process.env.REDSHIFT_USER, process.env.REDSHIFT_PASSWORD, {
host: process.env.REDSHIFT_HOST,
port: process.env.REDSHIFT_PORT,
dialect: 'postgres',
pool: false,
keepDefaultTimezone: true, // avoid SET TIMEZONE
databaseVersion: '8.0.2' // avoid SHOW SERVER_VERSION
});
答案 1 :(得分:2)
Sequelize与Redshift不兼容。虽然Redshift是在Postgres之上编写的,但它是一个列式DB,主要核心功能被重写。
尝试连接时会出现错误,并且不支持设置时区'
以下主题显示了一些覆盖时区错误但后来遇到其他问题的人。 ' Using Node 'pg' library to connect to Amazon Redshift
如果Redshift是强制性的,您可以使用node-jdbc包连接Redshift https://github.com/CraZySacX/node-jdbc
如果ORM是强制性的,您应该尝试将数据存储移动到纯Postgres
答案 2 :(得分:0)
Redshift基于postgres 8.0.2(http://docs.aws.amazon.com/redshift/latest/dg/c_redshift-and-postgres-sql.html)的顶部,因此postgres和sequelize都应该能够连接到它。
我没有任何个人经验,但redshift文档建议你可以使用常规的JDBC / ODBC驱动程序连接到它,所以如果节点驱动程序不工作我会感到惊讶/ p>
答案 3 :(得分:0)
目前我不认为GROUP BY
是连接Redshift的最佳选择。我建议您直接使用node-postgres模块。
话虽这么说,可能是因为您可能已经有一个使用SELECT Posts.id,
( SELECT COUNT(*) FROM Comments c
WHERE c.postid = Posts.id AND c.deleted = false
) AS total_post_comments
FROM Posts
WHERE Posts.approved = true
AND Posts.deleted = false
AND (
Posts.text LIKE '%test%'
OR EXISTS(
SELECT 1 FROM Comments
WHERE Comments.text LIKE '%test%'
AND Comments.deleted = false
AND Comments.postid = Posts.id
)
)
的项目,并且想要在这种情况下重用它,您可以执行以下操作。
Sequelize
这将产生以下弃用警告,因为Redshift基于Postgres 8.x,因此请考虑直接使用pg模块。
Sequelize