我在 RDS 中创建了一个支持 Babelfish 的 Postgres 数据库。我连接了 SSMS 并创建了一个名为“demo”的数据库。在“演示”中,我创建了一个名为“biz”的模式。我在“biz”模式中创建了我的表和存储过程。存储过程使用不合格的表名。最后,我写了一个 .Net 程序来做一些测试。我使用 System.Data.SqlClient Connection 和 Command 类,我可以连接到数据库。当我执行存储过程时,我得到“关系“X”不存在。” 错误。如果我更改我的存储过程并使用“biz”模式限定表名,错误就会消失。
如何避免必须使用架构限定表名?
例如:创建启用 Babelfish 的 Postgres 集群后,我在 SSMS 中执行了这些语句:
create database demo
use demo
create schema biz
create table [biz].[cities](
[city] varchar(128),
[state] varchar(128)
)
create procedure [biz].[p_getcities] as
begin
select * from cities
end
insert into [biz].[cities](city, state) values ('Portland', 'OR')
insert into [biz].[cities](city, state) values ('Richmond', 'VA')
exec [biz].p_getcities
运行 p_getcities 后我收到此错误消息:
消息 33557097,第 16 级,状态 1,第 21 行关系“城市”不存在
当我切换到 pgAdmin 并尝试像这样运行存储过程时:
CALL biz.p_getcities()
我收到类似的错误:
错误:关系“城市”不存在第 1 行:从城市中选择 * ^ 查询:从城市中选择 * 上下文:PL/tsql 函数 biz.p_getcities() 第 2 行 SQL 语句 SQL 状态:42P01
但是,当我这样设置 search_path 时:
set search_path to biz
并执行存储过程,我得到了预期的结果:
波特兰或弗吉尼亚州里士满
Babelfish 中是否有相当于 search_path 的方法?