本帖最后由 郑全 于 2024-5-7 21:23 编辑
环境:
PG14 +LINUX 8.8
问题:
开发人员问,PG中,支持 生成UUID吗,具体是什么,答,类似这个函数 uuid_generate_v4()
看了一下, select uuid_generate_v4();会报错,找不到该函数
原来postgresql 14 默认是没有该功能,但是可以通过扩展uuid-ossp来实现
解决办法:
由于PG是通过源码安装的,
源码中已经有这个源码包了,不需要到处去找
位置在:
/postgresql/soft/postgresql-14.8/contrib/uuid-ossp
1. 检查是否已安装扩展uuid-ossp
\dx
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
---------+---------+------------+------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(1 row)
可以看到postgresql目前没有安装uuid-ossp扩展。
2.检查是否有可用来安装的扩展uuid-ossp
--查看当前可用的扩展
可以看到postgres目前并没有可用的uuid-ossp扩展。
此时,直接创建uuid-ossp会报错,如:
postgres=# create extension "uuid-ossp";
ERROR: could not open extension control file "/postgres/pg14/share/extension/uuid-ossp.control": No such file or directory
postgres=#
注意:
要用双引号将uuid-ossp引起来,因为有个中划线“-”。
3.PG安装uuid选项
注意:以ROOT用户去编译
su - root
cd /postgresql/soft/postgresql-14.8/
./configure --prefix=/postgresql/pg14 --with-uuid=ossp #prefix 安装目录
该操作只是在已安装完PG后,把uuid-ossp编译安装进了PG,不影响现有库。
4.源码编译UUID
#进入扩展目录
# cd /postgresql/soft/postgresql-14.8/contrib/uuid-ossp
#编译安装
# make && make install
5.配置uuid的软链接
--这里需要创建软连接,否则,后面创建扩展,会报错 :找不到 /postgresql/pg14/lib/libuuid.so.16
# find / -name libuuid.so.16
/postgresql/soft/uuid/uuid-1.6.2/.libs/libuuid.so.16
# ln -s /postgresql/soft/uuid/uuid-1.6.2/.libs/libuuid.so.16 /postgresql/pg14/lib/
6.创建扩展
查看可用扩展
postgres=# select * from pg_available_extensions;
...
uuid-ossp | 1.1 | | generate universally unique identifiers
可以看到已经有扩展uuid-ossp了。下面可以创建了。
创建扩展
postgres=# create extension "uuid-ossp";
CREATE EXTENSION
7.使用扩展
安装扩展成功以后,就可以使用函数uuid_generate_v4()来生产uuid了。
postgres=# select uuid_generate_v4();
uuid_generate_v4
--------------------------------------
9ef673d2-3652-455c-8b6e-c634165f514b
(1 row)
|