postgresql 数组类型初步实践

实践环境

数据库:postgresql 9.4;操作系统:windows

创建包含数组类型的数据库

注意在设置default 值时(当然你可以不指定默认值),要声明数组的类型,像这样声明"::bigint[]"。

create table testarray(
	id serial primary key,
	images bigint[] default array[]::bigint[]
);

插入数组值

注意插入数组时,也要声明数组的类型,同上

insert into testarray (images) values(array[1,2,3,4,5,6]::bigint[]);

查询刚插入的数据

查询语句:

select * from testarray;

结果:

数组的操作

判断元素是否存在(操作符:"any")

要注意为查询出来的数组指定类型。

select 0 = any ((select images from testarray where id=1)::int[]) as isContain

查询结果:

删除元素(array_romeve),但不影响持久数据

select array_remove((select images from testarray)::varchar[],‘1‘);

查询结果:

删除元素,保存结果

思路是将数据查询出来进行操作之后("||"是一个数组操作符,合并元素和数组),再保存回到数据库。可以删除单个元素,也可以删除一个元素集(另一个数组),举一反三。

update testarray set images = (select images from testarray where id=1)::int[] || 1; 
select images from testarray;

结果:

给数据添加元素(操作符:"||"),但是不保存

给数组添加元素实际上就是将元素合并到一个数组里,办法很多,这里只距离"||"操作符的使用。

单个元素添加到数组

select (select images from testarray where id=1)::int[] || 100 as newimages;

结果:

添加多个元素到数组

select (select images from testarray where id=1)::int[] || array[200,300,300,400]::int[] as newimages;

结果:

给数据添加元素,并且保存

思路同5.3

update testarray update set images = (select images from testarray where id=1)::int[] || array[200,300,300,400]::int[] ;
select images from testarray;

结果:

附录

本博客不是系统的教程,只是简单的介绍postgresql 数据类型的使用。关于postgresql数组类型的操作符和函数,可以参见官方文档:http://www.postgresql.org/docs/9.1/static/functions-array.html

时间: 2024-08-09 06:35:00

postgresql 数组类型初步实践的相关文章

正确使用PostgreSQL的数组类型

2014-03-03 10:10 佚名 开源中国编译 我要评论(0) 字号:T | T 在Heap中,我们依靠PostgreSQL支撑大多数后端繁重的任务,我们存储每个事件为一个hstore blob,我们为每个跟踪的用户维护一个已完成事件的PostgreSQL数组,并将这些事件按时间排序. AD:2014WOT全球软件技术峰会北京站 课程视频发布 在Heap中,我们依靠PostgreSQL支撑大多数后端繁重的任务,我们存储每个事件为一个hstore blob,我们为每个跟踪的用户维护一个已完成

《JS权威指南学习总结--7.10 数组类型》

内容要点: 一.数组类型 判断它是否为数组通常非常有用.在ES5中,可以使用Array.isArray()函数来做这件事情: Array.isArray([]); //=>true Array.isArray({}); //=>false 二.类数组对象 JS数组的有一些特性是其他对象所没有的: 1.当有新的元素添加到列表中时,自动更新length属性. 2.设置length为一个较小值将截断数组. 3.从Array.prototype中继承一些有用的方法. 4.其类属性为"Arra

mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler

mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler mybatis 比 ibatis 改进了很多,特别是支持了注解,支持了plugin inteceptor,也给开发者带来了更多的灵活性,相比其他ORM,我还是挺喜欢mybatis的. 闲言碎语不要讲,今天研究了下mybatis的typeHandler: 先看这样一张表(postgresql) create table user ( id serial not null

C++-Golang的数组类型异同

1. 本文章的必要性 C++的存在像一把瑞士军刀,继承了C语言的设计理念--"充分相信程序员",几乎将所有的底层细节都暴露在外,程序员可以自由控制.在最近详细学习Golang的过程中,发现Golang中的常用结构的设计理念与C++截然不同,为许多常用的操作都提供了语言设计者所认为的"最佳实践".本文章仅讨论Golang中数组和切片. 2. Golang数组 和 C++数组(Array) 例子 C++ version // const常量长度初始化 // 显然非常量无

C++数组类型与函数类型

之所以将C++的数组类型与函数类型拿到一块说,是因为两者在很多地方都一样. 首先,声明形式上类似: 数组类型:  type [num]                                          数组:type name[num] 函数类型:  return_type (形参列表)    函数:return_type name(形参列表) 数组指针类型: type (*)[num] 数组指针:type (*name)[num] 函数指针类型: return_type (*)

使用typedef语句定义数组类型

使用typedef语句定义数组类型     1. 一维数组类型的定义格式 typedef <元素类型关键字><数组类型名>[<常量表达式>]; 例如: (1) typedef int vector[10]; (2) typedef char strings[80]; (3) typedef short int array[N]; 第一条语句定义了一个元素类型为int,含有10个元素的数组类型vector,若不使用typedef保留字,则就变成了数组定义,它只定义了一个元

怎么判断一个对象是不是数组类型?

前面<变量的赋值和对象的赋值>中有用到typeof运算符去判断运算数的类型,结果如下: alert(typeof 1); // 返回字符串"number" alert(typeof "1"); // 返回字符串"string" alert(typeof true); // 返回字符串"boolean" alert(typeof {}); // 返回字符串"object" alert(typeof

Java-第十四章-代参的方法(二)-编程实现,输入班里10名学生的身高,获得身高最高的学生要求对象数组类型方法

package com.ww.yzpA; public class Students { int No; int Height; } package com.ww.yzpA; public class Height { public Students getMaxHeigth(Students[] str) { Students A = new Students(); for (int i = 0; i < str.length; i++) { if (str[i].Height > A.He

JavaScript中数组高级编程实践-2

我们来 看 EcmaScript5 规范中的 数组新的API ,它们是非常有用的, 介绍完这一部分 ,我们将用 Array 数组 这个对象 来构建 一个类似于Java中ArrayList 类, 以便于封装 通用 的逻辑,实现代码复用. API : /** @param {Function} callback @param {Object} [initialValue] @return {Object} */ Array.prototype.reduce = function(callback,i