我的问题很简单。我知道一个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。
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'。
没有扩展(作弊)
如果您需要一个有效的v4 UUID
SELECT uuid_in(overlay(overlay(md5(random()::text || ':' || random()::text) placing '4' from 13) placing to_hex(floor(random()*(11-8+1) + 8)::int)::text from 17)::cstring);
感谢@Denis Stafichuk @Karsten和@autronix
或者你可以简单地通过这样做来获得类似uuid的值(如果你不关心有效性):
SELECT uuid_in(md5(random()::text || random()::text)::cstring);
output>> c2d29867-3d0b-d497-9191-18a9d8ee7830
(至少在8.4中有效)
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…);
验证表数据