gpt4 book ai didi

phoenix-framework - ecto 中的模式限定查询

转载 作者:行者123 更新时间:2023-12-04 07:45:52 26 4
gpt4 key购买 nike

我正在尝试将 ecto 与 postgres 模式一起使用,但是当从 repo.whatever 中使用时,查询将作为表名定向到公共(public)模式。

我可以像这样使用 query/3 将有效的模式限定查询作为 sql 传递:

 query(Repo, "SELECT * FROM schema.table", [])

并从架构中的表中获取结果。

这个:

 Repo.all(%Ecto.query{from: {"schema.table", model}})

结果是预期的 sql:

 SELECT a0.foo FROM schema.table as a0

但是,查询结果报错,找不到表schema.table。如果 postgrex 向 postgres 发送“schema.table”,它应该被解释为直接查询中的模式限定表名,对吗? postgrex 在发送之前是否以某种方式解析表名?

最佳答案

Ecto.Query 结构有一个名为 prefix 的特殊成员。使用 PostgreSQL,它允许您选择特定的模式:

my_query = from(m in Model, where: m.foo == ^bar)
%{my_query | prefix: "schema"}

这将使查询(以及阅读时生成的所有模型)使用此模式。

您还可以为单个模型设置前缀:

model = %Model{}
Ecto.Model.put_meta(model, prefix: "schema")

这将使此模型的所有后续 repo 操作(如预加载其他模型或更新此模型)使用指定的模式。正如我上面所说的 - 使用读取查询的前缀(如 one/2all/2 等)也将为模型设置前缀。

我认为由于某种原因缺少此功能的文档。我不确定具体原因,可能只是疏忽。

关于phoenix-framework - ecto 中的模式限定查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32815461/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com