Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 使用Knex+;博士后_Database_Postgresql_Migration_Knex.js - Fatal编程技术网

Database 使用Knex+;博士后

Database 使用Knex+;博士后,database,postgresql,migration,knex.js,Database,Postgresql,Migration,Knex.js,我需要向枚举类型再添加一个值。迁移已成功完成,但在数据库中未看到任何结果。Enumprod_status中仍有旧值 我正在使用这段代码进行迁移 exports.up = async function(knex) { return knex.schema.alterTable('products', (table) => { table.enu('status', ['hidden', 'published', 'reserved', 'sold', 'deleted', 'no

我需要向枚举类型再添加一个值。迁移已成功完成,但在数据库中未看到任何结果。Enum
prod_status
中仍有旧值

我正在使用这段代码进行迁移

exports.up = async function(knex) {
  return knex.schema.alterTable('products', (table) => {
    table.enu('status', ['hidden', 'published', 'reserved', 'sold', 'deleted', 'not-visible'], { useNative: true, enumName: 'prod_status' }).defaultTo('hidden').notNullable().index().alter();
  }).toSQL();
};

exports.down = async function(knex) {
  return knex.schema.alterTable('products', (table) => {
    table.enum('status', ['hidden', 'published', 'reserved', 'sold', 'deleted'], { useNative: true, enumName: 'prod_status' }).defaultTo('hidden').notNullable().index().alter();
  }).toSQL();
};
我也尝试过类似问题的其他变体,但都有错误


正在寻求您的帮助和/或帮助。

遗憾的是,您需要使用
knex.schema.raw
.alter()
实际上无法处理本机枚举。

遗憾的是,您需要使用
knex.schema.raw
.alter()
实际上无法处理本机枚举。

Mikael Lepistö建议使用
.raw
,这是唯一可行的解决方法。 我的工作解决方案:

exports.up = async function(knex) {
  return knex.raw(`
    CREATE TYPE prod_status_temp AS ENUM ('hidden', 'published', 'reserved', 'sold', 'deleted', 'not-visible');
    ALTER TABLE products
      ALTER COLUMN status DROP DEFAULT,
      ALTER COLUMN status TYPE prod_status_temp USING status::text::prod_status_temp;
    DROP TYPE IF EXISTS prod_status;
    ALTER TYPE prod_status_temp RENAME TO prod_status;
  `);
};

exports.down = async function(knex) {
  return knex.raw(`
    CREATE TYPE prod_status_temp AS ENUM ('hidden', 'published', 'reserved', 'sold', 'deleted');
    ALTER TABLE products
      ALTER COLUMN status DROP DEFAULT,
      ALTER COLUMN status TYPE prod_status_temp USING status::text::prod_status_temp;
    DROP TYPE IF EXISTS prod_status;
    ALTER TYPE prod_status_temp RENAME TO prod_status;
  `);
};

希望这对将来有帮助。

Mikael Lepistö提议使用
.raw
,这是唯一可行的解决方法。 我的工作解决方案:

exports.up = async function(knex) {
  return knex.raw(`
    CREATE TYPE prod_status_temp AS ENUM ('hidden', 'published', 'reserved', 'sold', 'deleted', 'not-visible');
    ALTER TABLE products
      ALTER COLUMN status DROP DEFAULT,
      ALTER COLUMN status TYPE prod_status_temp USING status::text::prod_status_temp;
    DROP TYPE IF EXISTS prod_status;
    ALTER TYPE prod_status_temp RENAME TO prod_status;
  `);
};

exports.down = async function(knex) {
  return knex.raw(`
    CREATE TYPE prod_status_temp AS ENUM ('hidden', 'published', 'reserved', 'sold', 'deleted');
    ALTER TABLE products
      ALTER COLUMN status DROP DEFAULT,
      ALTER COLUMN status TYPE prod_status_temp USING status::text::prod_status_temp;
    DROP TYPE IF EXISTS prod_status;
    ALTER TYPE prod_status_temp RENAME TO prod_status;
  `);
};

希望它对将来的人有所帮助。

这是您代码中的错误吗
table.enu('status'),
根据knex.js文档,可以使用
enu/enum
尝试删除“toSql”调用,它是冗余的,没有
.toSql()
得到一个错误,即此类型已经存在于您的代码中?
table.enu('status',
根据knex.js文档,可以使用
enu/enum
尝试删除“toSql”调用,它是冗余的,没有
.toSql()
获取此类型已经存在的错误
table.enum(“事件类型”[“已创建”、“已更新”],{useNative:true,enumName:“事件类型”})
对于我想在enum中添加“deleted”的特定情况,这是使用knex 0.21.1和pg 7.4.3的唯一解决方案。请注意我如何命名自己的类型
event\u type
table.enum(“event\u type”,[“created”,“updated”],{useNative:true,enumName:“event\u type”})
对于我想在枚举中添加“deleted”的特定情况,这是唯一适用于knex 0.21.1和pg 7.4.3的解决方案。请注意我如何命名我自己的类型
事件类型