2017-08-16 63 views
1

我已經搜索了Web和PGSQL文檔,以獲取有關對我而言是隱藏數據類型的信息,但缺乏。我正在處理一個現有的數據庫,該數據庫具有帶有前兩個下劃線(__some_type)的返回類型的函數。在PGAdmin3中,您可以選擇在樹視圖中顯示類型,在那裏可以看到一些可識別的類型,這些類型在各種函數中使用,哪些不是,但哪裏都看不到這些其他類型。我通過PyCharm完整版瞭解到,我可以連接到PostgreSQL數據庫並查看我提到的所有類型。以及在帶有「\ dT」的控制檯中,但不在PGAdmin中。PGAdmin3隱藏的對象類型

問:什麼是與前面有一個或兩個下劃線類型的交易? (__some_type)。

跟帖:我發現一個未經證實的源描述限制用戶創建以下劃線開頭的類型,但具體還沒有從PG來源證實了這一點。

這裏是鏈接到:https://momjian.us/main/writings/pgsql/aw_pgsql_book/node223.html

我提線是對在「注意事項」的底部一路:

類型名不能以下劃線開頭(「_ 「)並且可以 只有31個字符長。這是因爲Postgres爲每個基本類型默認創建了一個數組類型,其名稱由 類型的名稱前面加下劃線組成。

續搜索結果: 我已經找到了我說話的引用,但它並沒有進入對這種類型的行爲,或者發生了什麼細節,如果用戶違反此「限購」。

PG源從6.3文檔:

如前所述,Postgres的完全支持基本類型的陣列。 此外,Postgres也支持用戶定義類型的數組。 當你定義一個類型時,Postgres會自動提供對該類型的 數組的支持。由於歷史原因,陣列類型的 名稱與用戶定義的類型相同,前綴爲下劃線字符_ 。複合類型不需要定義任何函數,因爲系統已經理解它們在內部看起來像什麼。

6.4 Docs on Create Type

限制

類型名不能以下劃線開頭( 「_」),並可以 只能是長15個字符。這是因爲Postgres爲每個基本類型默認創建了一個數組類型,其名稱由 類型的名稱前面加下劃線組成。

回答

0

對類型名稱中下劃線的限制不再適用。從文檔來看,它在8.28.3之間下降。

這些類型不顯示在pgAdmin3中的事實看起來像一個錯誤。正如你可以從source看到的那樣,它會過濾掉任何帶有下劃線的類型。它試圖抑制自動生成的數組類型,但查詢早於版本8.3(回到這仍然是可靠的方法時),並且從未更新爲使用新的pg_type.typarray列。

不確定這個問題是否存在於pgAdmin4中。如果你想堅持使用pgAdmin3,BigSQL仍然保持fork,所以如果你想看到這個問題,他們可能是你最好的選擇。

+0

我謝謝你!我最終從6.3到9.x讀了所有不同的文檔,你是對的。 –