【问题标题】:Accessing non-public schema in PostgreSQL with Pentaho使用 Pentaho 访问 PostgreSQL 中的非公共模式
【发布时间】:2012-10-22 17:41:51
【问题描述】:

首先让我说,我对 Pentaho 的了解不会填满一个段落。我对 PostgreSQL 更了解。我正在与一些承包商合作,他们正在为我的公司在 Pentaho (v. 4.5) 中构建一组月度报告。一些数据需要通过 ETL 流程并汇总以用于报告目的。从 dba(ish) 的角度来看,我想将这些表移动到单独的 PostgreSQL 架构中。

我知道 Pentaho 经常与 MySQL(它没有模式)一起使用,我担心这可能会导致问题。我做了一些“谷歌搜索”,并没有找到很多关于该主题的点击,但我确实找到了一个封闭的 bug from a few years ago - 因此暗示应该支持该功能。

在我这样做之前,我想看看是否有人知道这会失败或不是一个坏主意的原因。 (或者如果你已经完成并且效果很好,也请告诉我)。

最后注意事项:我使用的是 PostgreSQL 9.1.5,而且我无法访问 Pentaho 实例,甚至无法自己进行测试。而且我希望 Stackoverflow 社区中的好人能够分享他们的专业知识,让我不必安装一个,也不必花时间玩/测试来了解这是一个坏主意。

编辑:

我知道这个问题有点含糊,但我希望有人会阅读它并分享他们的任何经验。所以,让我把它写得更清楚,问更多明确的问题。

我什么都没做。我不知道彭塔霍。我不想学习 Pentaho(不是说 Pentaho 有什么问题……只是现在不是我的兴趣所在)。我的公司雇用了承包商(我没有雇用他们)。他们有使用 Pentaho 的经验,但使用的是 MySQL。他们对 PostgreSQL 一无所知。 PostgreSQL 和 MySQL 之间有一些重要的区别。包括 PostgreSQL 支持模式的事实(而 MySQL 使用单独的数据库......在概念上相似但在某些方面表现不同)。一些 ORM(和工具)并不真正喜欢这个......例如,Django 框架仍然没有真正完全支持 Postgresql 中的模式(我知道这一点是因为我经常使用 Python 和 Django,而且我的生活要好得多当我将事物保存在“公共”模式中时)。由于我在 Django 和 PostgreSQL 模式方面的经验,我对将这些数据移动到新模式有点怀疑。

我明白,无论表格在哪里,它们都需要权限才能访问数据。

我的明确问题:

  • 您是否使用 Pentaho 访问 PostgreSQL 数据库以访问“公共”(默认)以外的模式中的表。
  • 如果是这样,它是否可以正常工作(没有问题)?
  • 如果您遇到问题,您愿意与我(以及 Stackoverflow 社区)分享任何对您有帮助的在线资源吗?或者您愿意详细说明您在这里记得的内容吗?
  • 你知道什么不能正常工作吗?例如,Pentaho 中与此主题相关的一个未解决的错误。

同样,这不是您的标准问题。我希望那里有人有经验并愿意在这里分享它,让我不必花时间设置一个新的 Pentaho 实例并尝试学习 Pentaho 来测试它等等。

谢谢。

【问题讨论】:

  • 对不起,我不明白。你的问题到底是什么?
  • @a_horse_with_no_name ...我想我已经说得很清楚了。我引用:“在我这样做之前,我想看看是否有人知道这会失败或不是一个坏主意的原因。(或者如果你已经完成它并且效果很好,请也告诉我)。”
  • 你尝试了什么?您是否创建了一个新模式,将一些表复制到其中,并尝试针对这些表运行报告?当你这样做的时候发生了什么?有任何错误信息吗?另外,non-public 是指除了 public 之外命名为某事物的模式,还是指除了 public 之外命名为某事物的模式权限受限?
  • @Catcall。请查看我的编辑。谢谢。

标签: postgresql postgresql-9.1 pentaho


【解决方案1】:

你可以走两条路:

1) 之前的帖子所说的(“Pentaho 步骤(表输入、输出等)通常允许您指定数据库模式。”)

2) 在数据库连接中,高级选项卡,“首选模式名称”。

如果您使用不同的架构,您可以为每个架构创建一个数据库连接。使用这种方法,您可以将输入/输出步骤中的架构字段留空。

【讨论】:

    【解决方案2】:

    我们使用 MS SQL 服务器,我可以告诉你,Pentaho 确实对模式的想法感到困惑。他们的许多应用程序都允许您选择架构,但 Pentaho 就像您所说的那样,是为使用 mySQL 之类的东西而构建的。

    让您的 pentaho 数据库用户像在 mySQL 中一样工作。

    我们将数据库用户默认设置为 dbo,然后我们构建了类似 dbo.dimDimension 的表, dbo.factFactTable 等。基本上,仅将 dbo 用于 Pentaho 目的。 (或者你想默认的任何模式。)

    【讨论】:

    • 非常感谢您的回复!非常感谢。
    【解决方案3】:

    我每天都广泛使用 PDI 和 PgSQL 以及一堆不同的模式。它工作正常。您可能遇到的唯一麻烦是 Pg 的麻烦做法是强制不带引号的标识符小写而不是大写。当我将高级连接属性设置为“引用数据库中的所有内容”时,我很快意识到一切都变得更容易了。

    是的,如果 PDI 不为您做,您必须在键入 SQL 时引用所有内容,但它工作得很好。尚未尝试强制所有标识符为小写,但我希望这也能奏效。

    是的,也可以使用“首选架构名称”,但请注意,某些步骤使用该选项,而其他步骤则不使用。例如,您不能期望它将架构名称添加到您在表输入步骤中键入的 SQL。

    您可能遇到的唯一其他问题是 Pg 的 JDBC 驱动程序的限制。它不如 SQL Server 或 DB2,但我遇到的唯一问题是当 Table Output 步骤处于批处理模式时,将错误行从 Table Output 步骤发送到另一个步骤。

    享受学习 PDI 的乐趣。它可以很好地补充您的 DBA 技能。

    布赖恩

    【讨论】:

    • 谢谢!我非常感谢您的回复。我对最初的问题感到震惊(甚至得到了几票反对票 - 哈哈)。感谢您的建议。
    【解决方案4】:

    Pentaho 步骤(表输入、输出等)通常允许您指定数据库模式。

    我使用 PDI 和我们的 8.4 Postgres 实例进行了快速测试,并且能够探索、读取和写入不同模式中的表。

    所以,我认为这是一个合理的方向。希望这会有所帮助。

    【讨论】:

    • 非常感谢您的回复!
    • @David S:没有问题。我不太熟悉跨版本使用各种 Postgres JDBC 驱动程序的含义,但是当前版本的 Pentaho 设计工具附带 8.4 驱动程序。可能不是问题,或者您的承包商可能已经更新,但我想我会提到它。
    • 好建议。我会记住这一点。再次感谢您的帮助。
    猜你喜欢
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 2019-05-01
    • 2016-10-30
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多