在 Rails 中连接外部 redshift 数据库时出错

Posted

技术标签:

【中文标题】在 Rails 中连接外部 redshift 数据库时出错【英文标题】:Getting error when connecting with external redshift database in rails 【发布时间】:2019-03-12 09:42:32 【问题描述】:

收到此错误:

PG::InsufficientPrivilege: 错误: 设置参数的权限被拒绝 “client_min_messages”到“警告”:SET client_min_messages TO 连接 redshift 数据库时出现“警告”。

enter image description here

我的 database.yml 文件设置如下所示

development:
  adapter: postgresql
  encoding: utf8
  host: nacfhrcluster123.ctvpledrvuobs5.us-east-1.redshift.amazonaws.com
  port: 5439
  username: nacfhr123
  password: NACFDChr12345!
  database: devnacfhrdc
  pool: 5
  schema_search_path: 'beta'
  timeout: 5000 
  min_messages: warning

【问题讨论】:

检查您的 PG 用户的权限。 您可能想要编辑您的问题以删除您的密码 - 除非它是一个虚拟的但看起来不像 @JonScott 我想这有点太晚了,所以 OP 可能需要更改他们的密码。 是的,同意,您应该期望用户/密码即使在被删除后也能广泛使用。希望它只是一个假人。 【参考方案1】:

谢谢大家的回复。我通过在我的 gemfile 中添加一个名为“activerecord5-redshift-adapter”的 gem 解决了这个问题。因此,您必须在 gem 文件中添加以下行。

gem 'activerecord5-redshift-adapter'

然后再次运行 bundle install。

【讨论】:

【参考方案2】:

重要的是要意识到 Redshift 不是 Postgres。有很多不同。

一个区别是可用的参数有很大不同,Redshift上唯一可以设置的参数有:

analyze_threshold_percent
datestyle
extra_float_digits
query_group
search_path
statement_timeout
wlm_query_slot_count

您将需要更改您的 rails 连接,以便不要求设置此参数。

我猜这意味着删除min_messages: warning

【讨论】:

也尝试删除 min_messages 参数,但它不起作用【参考方案3】:

我希望这会有所帮助。据我所知,Redshift 没有可用的活动记录,而且Redshift 不是典型的RDBMS 也没有任何意义。 我们有类似的场景,我们将 ROR 用作分析和规划应用程序之一的前端。

这是我们的应用场景:

前端:ROR 数据库:mysql(OLTP) 数据仓库:Redshift(OLAP)

这就是数据在 ROR 和 Redshift 之间来回流动的方式。

从 ROR 插入/更新到 Redshift(很少发生)。 对于来自 ROR 的任何对数据仓库产生影响的操作,ROR 会执行带有特定查询的 PSQL 命令,而不是通过活动记录。 从 Redshift 中选择(经常发生) 同样,为了通过选择查询从 DW 获取数据并使用PSQL 命令重定向到文件,然后使用myssqlimport 将其导入OLTP

我们使用的psql、mysqlimport 工具的链接。 如果您有其他具体的后续问题,请发表评论。

【讨论】:

以上是关于在 Rails 中连接外部 redshift 数据库时出错的主要内容,如果未能解决你的问题,请参考以下文章

Rails 如何在使用外部 API 创建时保存数据?

从 redshift 中删除外部表的所有分区

在 REDSHIFT 中的 ALTER 语句中连接字符串(语法错误)

定期运行 Redshift 查询

带有 Redshift 的 Postgres 外部模式:我可以使用外部数据包装器吗?

Rails 与 Redshift - 我如何创建关系?