Postgresql

text 和 pg_catalog.text 有什麼區別?

  • January 18, 2018

我有一個經典的 3 環境設置(開發、登台和生產),每個環境都有自己的RDS PostgreSQL 9.3。客戶端/伺服器版本是psql (9.3.5, server 9.3.3).

為了保持模式對齊,我有一個定期模式差異作業,當模式不同時它會通知我。

幾天前,我開始得到許多這樣的差異:

CREATE TABLE ...
...
<     title pg_catalog.text,
<     subtitle pg_catalog.text,
---
>     title text,
>     subtitle text,

staging 中的text欄位以某種方式轉換為pg_catalog.textprod。

text和 和有什麼不一樣pg_catalog.text?我怎樣才能將這兩種模式等同起來?

它們在預設安裝中是相同的。

pg_catalog.text是類型 name 的模式限定版本text

search_path 總是pg_catalog自動包含。根據文件:

除了public使用者創建的模式之外,每個數據庫還包含一個pg_catalog模式,其中包含系統表和所有內置數據類型、函式和運算符。pg_catalog始終有效地成為搜尋路徑的一部分。如果它沒有在路徑中顯式命名,那麼在搜尋路徑的模式之前會隱式搜尋它。這可確保始終可以找到內置名稱。但是,**如果您希望使用者定義的名稱覆蓋內置名稱,**則可以顯式放置在搜尋路徑的末尾。pg_catalog

大膽強調我的。如果您這樣做,Postgres 將自動以文本表示形式啟動模式限定名稱,否則將以不同方式解決。這很可能就是你所看到的。檢查您的電流search_path

SHOW search_path;

密切相關:

引用自:https://dba.stackexchange.com/questions/83787