在你创建表的时候,也会自动创建一个复合类型,名字与表名字相同,表示该表的复合类型。需要注意的是,表定义的各项约束(如不可为空)对自动创建的同名复合类型无效。
关于复合类型值写法,上面的ROW方式比较常用,如果是多个字段,那么ROW可以省略,即('fuzzy dice', 42, 1.99);还可以一般格式——'("fuzzy dice",42,1.99)'——外层以单引号包裹。我们可以操作复合类型的整体,也可以针对其某几个字段操作,具体请参考文档。
回到函数的介绍,比如下面两段代码表示的是同一个意思:
-- 1 CREATE FUNCTION new_emp() RETURNS emp AS $$ SELECT text ’None’ AS name, -- 注意类型转换 1000.0 AS salary, 25 AS age, point ’(2,2)’ AS cubicle; $$ LANGUAGE SQL; -- 字段顺序和类型要和返回类型(此处是emp)保持一致 -- 2 CREATE FUNCTION new_emp() RETURNS emp AS $$ SELECT ROW(’None’, 1000.0, 25, ’(2,2)’)::emp; $$ LANGUAGE SQL;
双冒号:: 表示类型转换。
前面说到,函数能返回集合和表,返回表是最近出版的SQL标准之一,所以可能比返回集合更好一点;但是对于返回表来说,It is not allowed to use explicit OUT or INOUT parameters with the RETURNS TABLE notation — you must put all the output columns in the TABLE list.
PostgreSQL安装与配置
不得不说,自从入门了Linux之后,技术接触面广了很多,更乐意尝试.NET“标配”之外的东西。要在CentOS7.0上安装PostgreSQL,先到PostgreSQL RPM Building Project - Repository Packages找到对应的RPM包,并用yum安装:
yum install https://download.postgresql.org/pub/repos/yum/9.5/RedHat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm
上步只是install了RPM包,then,安装postgresql-server(还有其它一些packages,不过我们暂时安装postgresql-server即可)
yum install postgresql95-server
如果你安装的是9.4的版本,只要把上面的数字95改成94即可。
Due to policies for Red Hat family distributions, the PostgreSQL installation will not be enabled for automatic start or have the database initialized automatically. To make your database installation complete, you need to perform these two steps:
/usr/pgsql-9.5/bin/postgresql95-setup initdb #初始化库 systemctl start postgresql-9.5.service #启动
为了其它主机能连接到服务器,需要进行一些配置。关于系统参数配置,PostgreSQL提供了多种方式,适用场景稍有不同。这里选择编辑postgresql.conf文件的方式,另外还有个postgresql.auto.conf文件,保存的是系统参数默认值,是不允许直接编辑的,可以使用ALTER SYSTEM 命令进行配置值设定。postgresql.conf存储在PostgreSQL的data目录下,data目录可以在initdb时指定,如下:
initdb -D /usr/local/pgsql/data
#或者如下
pg_ctl -D /usr/local/pgsql/data initdb
This may be more intuitive if you are using pg_ctl for starting and stopping the server, so that pg_ctl would be the sole command you use for managing the database server instance.
不指定data目录的话,会默认给你一个,博主这用find命令看到是/var/lib/pgsql/9.5/data/。因为PostgreSQL实例是依赖于data目录的,所以可以在一台机子上开多个实例,每个实例都有自己的data目录,配置自然也不同;要pg_ctl启动、停止、重启等操作时需要带上data目录,或者指定PGDATA环境变量,否则不知道针对哪个实例进行操作。
find / -name postgresql.conf
#输出 /var/lib/pgsql/9.5/data/postgresql.conf
找到之后,就可以进行设置了,顺便熟悉下vi的操作。