2017-08-16 67 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读了所有不同的文档,你是对的。 –