一、UUID类型
UUID(Universally Unique Identifiers)用于存储一个UUID,UUID定义是一个128bit的数字。
Postgresql提供了UUID类型的比较运算符,例如:
postgres=# select uuid '1b34eaba-0d59-11e4-bf51-dc85de4d74f3' < uuid '1e0e95b0-0d59-11e4-bf51-dc85de4d74f3';
?column?
----------
t
(1 row)
虽然在Postgresql中没有提供直接的UUID生成函数,但是在contrib下的uuid-ossp模块提供了产生UUID函数。可以通过一下方式来生成UUID:
1.先安装系统os依赖包uuid、uuid-devel:
yum -y install uuid uuid-devel
安装完成可能 uuid-devel包没有,我使用Centos 6.5配置本地yum源(没有互联网)在使用yum安装时没有uuid-devel依赖包,因此我从网上下载了一个rpm包(参考网址:https://centos.pkgs.org/6/centos-x86_64/uuid-devel-1.6.1-10.el6.x86_64.rpm.html),然后使用rpm进行安装:
rpm -ivh uuid-devel-1.6.1-10.el6.x86_64.rpm
2.依赖包安装完成后,进行预编译(postgresql的源码包我还留着,进到源码包后再次进行编译):
./configure --prefix=/data/pg12.1 --with-uuid=ossp
注意:我PG安装目录是/data/pg12.1
3.进入源码包的contrb文件夹下的uuid-ossp目录下,进行gmake && gmake install :
cd contrib/uuid-ossp
gmake clean
gmake
gmake install
注意:我在安装PG时用的make install-world方式安装了contrib下所有插件,因为没有依赖包uuid、uuid-devel,所以没有成功安装uuid-ossp,所以我需要gmake clean清除一下。顺便说一下,如果在安装PG时安装了依赖包,那么就不需要在进行1~3步骤。直接进行第四步。如果在进行第4步时报如下错误,则说明没有成功安装uuid-ossp插件,还需要从第1步开始:
postgres=# create extension “uuid-ossp”;
ERROR: could not open extension control file “/data/pg12.1/share/postgresql/extension/uuid-ossp.control”: No such file or directory
4.登录postgresql,执行create extension,然后可以通过uuid_generate_v4()生成uuid:
[postgres@local130 ~]$ psql -U postgres -W -d postgres
psql (12.7)
Type "help" for help.
xzxt=# create extension "uuid-ossp";
CREATE EXTENSION
xzxt=# select uuid_generate_v4();
uuid_generate_v4
--------------------------------------
b1cd147b-d39e-4805-8c09-dcfb7cf19737
(1 row)
注意:需要在哪个库下使用uuid就在登陆哪个库下执行,一般登陆时指定-d参数到指定的库下执行create extension,会在指定的库下的public模式下创建,并可以使用uuid,执行后会在指定的库的public模式的function中看到uuid开头的函数:
xzxt=# \df
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+--------------------+-------------------+----------------------------------------------------------------------------------------------------------+------
public | fn_xxcj_ngzbhzh | character varying | unitcode character varying, tblname character varying, lrsj character varying, headstr character varying | func
public | fn_xxcj_xxzjbh | character varying | unitcode character varying, strdate character varying | func
public | uuid_generate_v1 | uuid | | func
public | uuid_generate_v1mc | uuid | | func
public | uuid_generate_v3 | uuid | namespace uuid, name text | func
public | uuid_generate_v4 | uuid | | func
public | uuid_generate_v5 | uuid | namespace uuid, name text | func
public | uuid_nil | uuid | | func
public | uuid_ns_dns | uuid | | func
public | uuid_ns_oid | uuid | | func
public | uuid_ns_url | uuid | | func
public | uuid_ns_x500 | uuid | | func
(12 rows)
二、pg_lsn类型
pg_lsn类型时PG9.1之后提供的表示LSN(Log Squence Number)的一种数据类型,LSN表示WAL日志的位置,在一些记录WAL日志信息的系统表中某些字段类型可以用pg_lsn类型。