3

经过各种 Google 搜索后,我仍然对选择不在 PostgreSQL 中默认公共架构下的表的问题感到头疼。

然而,我确实尝试在模型定义中引用 Postgres 的模式,但没有运气,查看日志,我明白为什么它被查询为“引用”

schema "nonpublicschema.sometable" do
    field :somefield, :string
end

抛出:

ERROR | relation "nonpublicschema.sometable" does not exist
ERROR | SELECT u0."somefield" FROM "nonpublicschema.sometable" AS u0

我明白这不是一个错误,但我想知道我还能如何实现这一点。

4

1 回答 1

3

不幸的是,我们不支持您定义的方法。请打开一个问题,我们可以改进它。

同时,也有一些变通方法。为此,您将需要 Ecto 1.0.2。对于查询,您可以设置前缀:

query = from p in Model, ...
query = %{query | prefix: "nonpublicschema"}

对于模型,您需要执行以下操作:

model = Ecto.Model.put_meta model, prefix: "nonpublicschema"

或者,您可以after_connect(conn, opts)在存储库中定义一个回调,并使用 Postgrex API 自动扩展您的搜索路径。

于 2015-09-22T14:16:43.627 回答