我正在尝试使用node-pg-migrate
并运行迁移在我的节点项目中创建表。当我运行迁移时,我得到函数 uuid_generate_v4(( 不存在。
我确实检查了我的扩展,并且 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。从这里安装的邮政 - https://postgresapp.com/
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
不幸的是,我没有太多关于您的 pg-migrate 文件外观的信息,但您必须指定以下内容:
pgm.createExtension('uuid-ossp', { ifNotExists: true });
// and
pgm.createTable('my_table', {
id: { type: 'uuid', primaryKey: true, default: new PgLiteral('gen_random_uuid()') },
// ...
原因是创建扩展必须位于不同的事务中。实际上,这意味着进行一次迁移来创建扩展。只有在以后的迁移中,才使用 uuid_generate_v4
函数创建表。