java - 在多租户中调用 postgres 存储过程
问题描述
我的 Postgres 数据库中有多个模式 ( schema1
, schema2
)。
我正在使用 liquibase 并在每个模式中声明创建过程。在我的示例程序中只做一个select name from users;
Psql 命令\df
向我展示了每个模式中的函数。一切似乎都很好
现在在 java 中,当我使用带有模式的 jdbctemplate 调用我的过程时schema1
,执行已完成,但我的表用户不存在。我不知道为什么,因为每个模式上都存在表用户。我已将模式名称作为参数添加到我的过程中,并在我的过程开始时对模式名称执行 set search_path 并且一切正常。
但是为什么我需要在我的程序中设置 search_path 呢?我的过程已经在每个模式上定义了,我在 jdbctemplate 调用中设置了模式名称?如果我不设置,为什么找不到我的用户表search_path
?
解决方案
如果您不想设置search_path
,则必须使用其完全限定名称引用该表。那就是schema_name.table_name
。这是因为在您的情况下search_path
默认为"$user", public
so(除非您有与您的用户名匹配的架构)
select name from users;
解析为
select name from public.users;
代替
select name from schema1.users;
推荐阅读
- json - 从 Gatling 中的 cvs 文件获取 json 请求正文
- python-3.x - Asyncio,由于哨兵问题,任务没有正确完成
- flutter - Flutter Web 微光效果
- pdf - Netsuite Advanced PDF 可以在滚轮打印机的无尽页面中使用吗?
- php - 无法从控制器获取输入值,Opencart:3
- ramda.js - 如何使用 Ramda 执行数组中的表达式字符串
- c++ - 是什么导致 WSHStringToAddress() 与 Widows Qt 发生崩溃?
- javascript - 如何在 Redux Store 中按 id 存储项目
- timeout - 本机 Apple Pay 超时
- java - 是否“在警告级别使用 slf4j 记录”,阻止运行“logger.debug(...”