我的问题很简单。我知道一个UUID的概念,我想生成一个引用每个“项目”从一个“商店”在我的DB与。似乎很合理,对吧?

问题是下面这行返回了一个错误:

honeydb=# insert into items values(
uuid_generate_v4(), 54.321, 31, 'desc 1', 31.94);
ERROR:  function uuid_generate_v4() does not exist
LINE 2: uuid_generate_v4(), 54.321, 31, 'desc 1', 31.94);
        ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

我已经在http://www.postgresql.org/docs/current/static/uuid-ossp.html上阅读了页面

我在Ubuntu 10.04 x64上运行Postgres 8.4。


当前回答

SELECT uuid_generate_v5(uuid_ns_url (), 'test');

其他回答

SELECT uuid_generate_v5(uuid_ns_url (), 'test');

PostgreSQL 13支持原生gen_random_uuid ():

PostgreSQL包含一个生成UUID的函数: Gen_random_uuid()→uuid 这个函数返回一个版本4(随机)UUID。这是最常用的UUID类型,适用于大多数应用程序。

db < > fiddle演示

Uuid-ossp是一个贡献模块,所以默认情况下它不会被加载到服务器中。必须将其加载到数据库中才能使用。

对于现代PostgreSQL版本(9.1及更新版本),这很容易:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

但是对于9.0及以下版本,您必须运行SQL脚本来加载扩展。请参阅8.4中有关contrib模块的文档。

对于Pg 9.1和更新版本,请阅读当前的contrib文档和CREATE EXTENSION。这些特性在9.0或更早的版本(如8.4)中不存在。

如果你正在使用PostgreSQL的打包版本,你可能需要安装一个包含contrib模块和扩展的单独包。在包管理器数据库中搜索'postgres'和'contrib'。

uuid-ossp模块提供了生成uuid (universally unique identifier)的函数。

uuid_generate_v1()该函数生成版本1的UUID。

添加扩展

如果“uuid-ossp”不存在,则创建扩展;

验证扩展

SELECT * FROM pg_extension;

运行查询

INSERT INTO table_name(id, columnn1, column2, column3,…)值 (uuid_generate_v1(), value1, value2, value3…);

验证表数据

pgcrypto扩展

从Postgres 9.4开始,pgcrypto模块包含gen_random_uuid()函数。这个函数生成一个基于随机数的版本4类型的UUID。

获取贡献模块(如果尚未可用)。

sudo apt-get install postgresql-contrib-9.4

使用pgcrypto模块。

CREATE EXTENSION "pgcrypto";

gen_random_uuid()函数现在应该可用;

使用例子。

INSERT INTO items VALUES( gen_random_uuid(), 54.321, 31, 'desc 1', 31.94 ) ;

引用自Postgres文档中的uuid-ossp模块。

注意:如果您只需要随机生成的uuid(版本4),请考虑使用pgcrypto模块中的gen_random_uuid()函数。