gpt4 book ai didi

java - 在 Multi-Tenancy 中调用 postgres 存储过程

转载 作者:行者123 更新时间:2023-12-01 18:58:49 26 4
gpt4 key购买 nike

我的 Postgres 数据库中有多个架构(schema1schema2)。

我正在使用 liquibase 并在每个模式中声明创建过程。在我的示例中,过程仅执行select name from users;

Psql 命令 \df 显示每个模式中的函数。一切似乎都很好

现在在java中,当我使用具有模式schema1的jdbctemplate调用我的过程时,执行已完成,但我得到的表用户不存在。我不知道为什么,因为每个架构上都存在表用户。我已将模式名称作为参数添加到我的过程中,并在过程开始时对模式名称设置了 search_path,一切正常。

但是为什么我需要在程序中设置 search_path ?我的过程已在每个模式上定义,并且我在 jdbctemplate 调用中设置模式名称?如果我不设置 search_path,为什么找不到我的用户表?

最佳答案

如果您不想设置search_path,则必须使用其完全限定名称来引用该表。那是schema_name.table_name。这是因为 search_path 默认为 "$user", public 所以在您的情况下(除非您有与您的用户名匹配的架构)

select name from users;

解析为

select name from public.users;

而不是

select name from schema1.users;

关于java - 在 Multi-Tenancy 中调用 postgres 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59653961/

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