Greenplum 自定义复合类型 数组

标签

PostgreSQL , Greenplum , composite type array


背景

如果你现在要在Greenplum中创建一个复合类型,是不会自动给你创建对应的数组类型的。(而实际上PostgreSQL 在2007年已经支持了这个功能)

Greenplum需要等到5.0,才能使用上它了。

https://github.com/greenplum-db/gpdb/commit/8954a537ee6199a80c38581fd3cd7ed463abbdea

Support arrays of composite types
Backport from upstream with this commit:  

    commit bc8036f
    Author: Tom Lane <tgl@sss.pgh.pa.us>
    Date:   Fri May 11 17:57:14 2007 +0000  

        Support arrays of composite types, including the rowtypes of regular tables
        and views (but not system catalogs, nor sequences or toast tables).  Get rid
        of the hardwired convention that a type's array type is named exactly "_type",
        instead using a new column pg_type.typarray to provide the linkage.  (It still
        will be named "_type", though, except in odd corner cases such as
        maximum-length type names.)  

        Along the way, make tracking of owner and schema dependencies for types more
        uniform: a type directly created by the user has these dependencies, while a
        table rowtype or auto-generated array type does not have them, but depends on
        its parent object instead.  

        David Fetter, Andrew Dunstan, Tom Lane
 master (#1)  5.0.0-alpha.1 5.0.0-alpha.0
1 parent 5b33bee commit 8954a537ee6199a80c38581fd3cd7ed463abbdea @HaozhouWang HaozhouWang committed on 9 Mar 2016

https://www.postgresql.org/docs/8.2/static/sql-createtype.html

Array Types

Whenever a user-defined base data type is created, PostgreSQL automatically creates an associated array type,
whose name consists of the base type's name prepended with an underscore.
The parser understands this naming convention, and translates requests for columns of type foo[] into requests for type _foo.
The implicitly-created array type is variable length and uses the built-in input and output functions array_in and array_out.  

You might reasonably ask why there is an ELEMENT option, if the system makes the correct array type automatically.
The only case where it's useful to use ELEMENT is when you are making a fixed-length type that happens to be internally an array of a number of identical things,
and you want to allow these things to be accessed directly by subscripting, in addition to whatever operations you plan to provide for the type as a whole.
For example, type name allows its constituent char elements to be accessed this way.
A 2-D point type could allow its two component numbers to be accessed like point[0] and point[1].   

Note that this facility only works for fixed-length types whose internal form is exactly a sequence of identical fixed-length fields.
A subscriptable variable-length type must have the generalized internal representation used by array_in and array_out. For historical reasons
(i.e., this is clearly wrong but it's far too late to change it),
subscripting of fixed-length array types starts from zero, rather than from one as for variable-length arrays.  
时间: 2024-10-28 20:52:50

Greenplum 自定义复合类型 数组的相关文章

CXF处理javaBean等复合类型以及Map等复杂类型的数据

在实际中除了传入一些基本的参数以外,还需要传入一些类似于javaBean等复合类型,或者Map等复杂类型的数据,这一篇博文主要来写两个demo,模拟一下CXF处理这类数据的过程. 1. CXF处理javaBean等复合类型的数据 客户端提交一个数据过去,要检查权限,比如是管理员的话,就拥有多个权限,普通用户可能就一个权限之类的.这样的话需要一个用户的bean和权限的bean,然后数据库的数据我用List来模拟一下,demo如下: public class User {     private I

WebService大讲堂之Axis2(2):复合类型数据的传递

在实际的应用中,不仅需要使用WebService来传递简单类型的数据,有时也需要传递更复杂的数据, 这些数据可以被称为复合类型的数据.数组与类(接口)是比较常用的复合类型.在Axis2中可以直接使 用将WebService方法的参数或返回值类型声明成数组或类(接口).但要注意,在定义数组类型时只能使 用一维数组,如果想传递多维数组,可以使用分隔符进行分隔,如下面的代码所示: String[] strArray = new String[]{ "自行车,飞机,火箭","中国,美

HTAP数据库 PostgreSQL 场景与性能测试之 8 - (OLTP) 多值类型(数组)含索引实时写入

标签 PostgreSQL , HTAP , OLTP , OLAP , 场景与性能测试 背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能.性能.架构以及稳定性. PostgreSQL社区的贡献者众多,来自全球各个行业,历经数年,PostgreSQL 每年发布一个大版本,以持久的生命力和稳定性著称. 2017年10月,Pos

Go语言中的复合类型详细介绍_Golang

golang复合类型包括:结构体.数组.切片.Maps. 1.数组 数组 golang中的数组与C语言中的数组差异很大,倒更类似Pascal中的数组. (Slice,下个话题,有些像C语言中的数组) 复制代码 代码如下: var ar [3]int 声明ar为一个拥有三个整型数的数组,所有元素初始化为0. 大小是类型的一个组成部分. 内置的函数len可以用于获取数组大小: 复制代码 代码如下: len(ar) = 3 数组是值类型 golang中的数组是值,而非C语言中的隐式指针.你可以获得数组

乍样创建自定义结构的数组

问题描述 乍样创建自定义结构的数组,就是数组元素的类型是一个自定义的结构.在线等 解决方案 解决方案二:可以尝试用ArrayList或Hastable

让WordPress搜索结果包括自定义文章类型的内容

如果你的WordPress站点添加了自定义文章类型,请记得让WordPress默认搜索支持自定义文章类型,即可以搜索自定义文章类型的内容.实现的方法很简单,将下面的代码添加到主题的functions.php 文件中即可: 让搜索支持自定义文章类型  代码如下 复制代码 function searchAll( $query ) {   if ( $query->is_search ) { $query->set( 'post_type', array( 'post','books', 'prod

WordPress RSS Feed输出自定义文章类型的内容

WordPress支持RSS Feed输出,但在整站Feed源只会输出文章(post),如果你添加了自定义文章类型,需要将它们添加到WordPress的整站Feed源中.实现方法很简单,将下面的代码添加到主题的functions.php文件即可:  代码如下 复制代码 // 添加自定义文章类型到RSS Feed输出 function custom_feed_request( $vars ) {  if (isset($vars['feed']) && !isset($vars['post_

wordpress判断当前文章是否为自定义内容类型

先来看WordPress自定义类型实例 除了以上的保留文章类型外,为了满足多样化需求,我们可以自定义一些文章类型,例如:公告.视频.专题等等.自定义文章类型的实际用途很广,可以制作出复杂多变的表现形式.先来看看一个简单自定义类型的例子:  代码如下 复制代码 add_action( 'init', 'create_post_type' ); function create_post_type() {  register_post_type( 'acme_product',   array(   

C++ 复合类型学习笔记

复合类型是基于整形和浮点型创建的.影响最为深远的复合类型是类. 1.数组 数组是一种数据格式,能够存储多个同类型的值. typeName arrayName[arraySize] int months[12] = {1, 2, 3};其他元素将设置为0 char name[4] = {'p', 'i', 'g', '\0'}; 不能将一个数组赋值给另一个数组. 2.字符串 存储在内存的连续字节中的一系列字符.C++处理字符串的方式有两种.一种来自C语言,常被称为C-风格字符串,另一种基于stri