在 Ecto 模型中从非 public 模式中选择 table
Selecting table from non-public schema in Ecto Model
经过各种 Google 搜索后,我仍然为选择不在 PostgreSQL 中默认 public 架构下的 table 问题而挠头。
不过,我尝试在模型定义中引用 Postgres 的模式,但没有成功,查看日志,我明白了为什么会被查询 "quoted"
schema "nonpublicschema.sometable" do
field :somefield, :string
end
投掷:
ERROR | relation "nonpublicschema.sometable" does not exist
ERROR | SELECT u0."somefield" FROM "nonpublicschema.sometable" AS u0
我知道这不是错误,但我想知道我还能如何实现这一点。
很遗憾,我们不支持您定义的方法。请提出一个问题,我们可以改进它。
同时,还有一些解决方法。为此你需要 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 自动扩展您的搜索路径。
经过各种 Google 搜索后,我仍然为选择不在 PostgreSQL 中默认 public 架构下的 table 问题而挠头。
不过,我尝试在模型定义中引用 Postgres 的模式,但没有成功,查看日志,我明白了为什么会被查询 "quoted"
schema "nonpublicschema.sometable" do
field :somefield, :string
end
投掷:
ERROR | relation "nonpublicschema.sometable" does not exist
ERROR | SELECT u0."somefield" FROM "nonpublicschema.sometable" AS u0
我知道这不是错误,但我想知道我还能如何实现这一点。
很遗憾,我们不支持您定义的方法。请提出一个问题,我们可以改进它。
同时,还有一些解决方法。为此你需要 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 自动扩展您的搜索路径。