POSTGRES _text 和 text[][] 数组类型之间有什么区别?

Eoi*_*oin 7 postgresql array

我正在使用由脚本( Osm2pgsql )创建的 postgres 数据库。它创建了一些类型为_text的二维数组的字段text。我试图理解为什么它不只是创建一个text[][]字段,以及为什么这种类型存在于 postgres 中。

我可以在文档中找到这个链接,其中写着:

当您定义新的基本类型时,PostgreSQL 会自动提供对该类型数组的支持。数组类型通常与基类型具有相同的名称,并在前面添加下划线字符 (_)。

但我不明白为什么当文本是 postgres 的内置类型时它使用这个“下划线”类型名称?

Lau*_*lbe 9

_text并且text[]在 PostgreSQL 中可以互换。也是text[][]相同的数据类型。

为了让事情更清楚:type[]表示“元素为类型的数组类型type”,该类型的实际名称是_type。选择名称的原因是,当创建类型时,也会创建关联的数组类型。该内部数组类型的名称是通过使用makeArrayTypeName类型名称作为参数调用 C 函数来确定的。这又调用makeUniqueTypeName,其代码注释描述了它的作用:

/*
 * makeUniqueTypeName
 *      Generate a unique name for a prospective new type
 *
 * Given a typeName, return a new palloc'ed name by prepending underscores
 * until a non-conflicting name results.
 *
 * If tryOriginal, first try with zero underscores.
 */
Run Code Online (Sandbox Code Playgroud)

原则上,重命名为其他名称是没有问题的_type,但 PostgreSQL 为了避免混淆而禁止这样做。

  • 不,我想说是出于技术原因。每种类型都必须有一个名称,选择 `type[]` 作为名称需要用双引号引起来,并且可能会导致 `type[]` 和 `"type[]"` 之间出现有趣的混淆。 (2认同)