簡體   English   中英

具有不合格表名的存儲過程不適用於 Babelfish

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM