Postgresql
text 和 pg_catalog.text 有什麼區別?
我有一個經典的 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.text
prod。
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;
密切相關: