函数uuid_generate_v4()在Postgres 11中不存在

21

我正在尝试使用node-pg-migrate并运行迁移以在我的node项目中创建表格。

当我运行迁移时,我会收到"function uuid_generate_v4() does not exist."的错误提示。

我已经检查了我的扩展,并且uuid-ossp是可用的。

extname  | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition 
-----------+----------+--------------+----------------+------------+-----------+--------------
 plpgsql   |       10 |           11 | f              | 1.0        |           | 
 uuid-ossp |    16384 |         2200 | t              | 1.1        |           | 
(2 rows)

我希望我的迁移可以成功运行,但它却失败了。我使用的是Mac上的Postgres 11。
从这里安装的Postgres - https://postgresapp.com/


希望您没有遇到与此相同的问题:https://github.com/salsita/node-pg-migrate/issues/401#issuecomment-466891346 - Shinigami
3个回答

38
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

你还需要安装由 postgresql-contrib 包提供的 uuid-ossp.control 扩展。 - mkungla

1
很抱歉,我对于您的pg-migrate文件的具体情况并不了解,但是您必须指定以下内容:
pgm.createExtension('uuid-ossp', { ifNotExists: true });
// and
pgm.createTable('my_table', {
    id: { type: 'uuid', primaryKey: true, default: new PgLiteral('gen_random_uuid()') },
    // ...


嘿,我尝试了那个,但它仍然显示函数未找到。我一定做了些非常愚蠢的事情。在某个地方我发现它不在正确的模式中,我甚至把它放进去了,但它仍然给出了相同的错误。 - Rockr

0
原因是创建扩展必须在不同的事务中。实际上,这意味着需要有一个迁移用于创建扩展。只有在后面的迁移中使用uuid_generate_v4函数来创建表格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接