[英]Stored procedures with unqualified table names not working with Babelfish
我在 RDS 中創建了一個支持 Babelfish 的 Postgres 數據庫。 我連接了 SSMS 並創建了一個名為“demo”的數據庫。 在“演示”中,我創建了一個名為“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 后我收到此錯誤消息:
Msg 33557097, Level 16, State 1, Line 21 relation "cities" does not exist
當我切換到 pgAdmin 並嘗試像這樣運行存儲過程時:
CALL biz.p_getcities()
我得到一個類似的錯誤:
錯誤:關系“城市”不存在第1行1:select *來自城市 ^查詢:select *來自城市上下文:PL/TSQL function BIZ.P_GETCITITS(P_GETCIES(P_GETCIES)()第2行,第2號
但是,當我這樣設置 search_path 時:
set search_path to biz
並執行存儲過程我得到了預期的結果:
波特蘭或里士滿 VA
Babelfish 中是否有等同於 search_path 的東西?
此解釋由 rcv-aws 的Rob Verschoor提供
這里發生的是過程 biz.p_getcities 中的名稱解析沒有正確解析表名。 它將它解析為“dbo”模式,而它應該將它解析為“biz”模式。 如您所述,這與 search_path 設置有關,在這種情況下設置不正確。 這是一個已知的錯誤,我們希望盡快修復它。
在此之前,解決方法是使用架構名稱限定表名,即來自 biz.cities 的 select *
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.