使用Sequelize和Redshift

时间:2015-08-16 16:25:06

标签: node.js sails.js sequelize.js amazon-redshift bookshelf.js

是否可以将SequelizeRedshift一起使用?如果没有,有哪些替代方案?我需要一个内置的事务支持Node.js的ORM,因此Sails.js不是一个选项。我也看了Bookshelf,但也找不到任何对Redshift的支持。

4 个答案:

答案 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