Node.js 增加列';使用Knex.js的Oracle DB表中的大小

Node.js 增加列';使用Knex.js的Oracle DB表中的大小,node.js,oracle,size,knex.js,Node.js,Oracle,Size,Knex.js,我在表中有一个密码列,存储在OracleDB 11g中 为了在上面存储散列密码,我需要将其大小从25字节增加到60字节或100字节 我不想手动执行此操作,我希望可以使用KnexJS(类似于迁移或种子)找到脚本或其他任何东西 谢谢。正确的说法是“增加”,而不是“增加”。看起来Knex.js支持通过alter方法将列(即将创建)的默认DDL更改为alter 理论上,它应该是这样工作的: knex.schema.alterTable('user', function(t) { t.string('

我在表中有一个密码列,存储在OracleDB 11g中

为了在上面存储散列密码,我需要将其大小从25字节增加到60字节或100字节

我不想手动执行此操作,我希望可以使用KnexJS(类似于迁移或种子)找到脚本或其他任何东西


谢谢。

正确的说法是“增加”,而不是“增加”。看起来Knex.js支持通过
alter
方法将列(即将创建)的默认DDL更改为alter

理论上,它应该是这样工作的:

knex.schema.alterTable('user', function(t) {
  t.string('password', 100).alter();
});
我必须承认,这个方法中的以下措辞让我有点担心:

Alter不是在较旧的列类型上增量完成的,因此,如果要添加notNull并保留旧的默认值,Alter语句必须同时包含.notNull().defaultTo(1).Alter()


我不知道这到底意味着什么。在生产中试用之前,一定要在开发中进行测试

我不知道。但是,为什么您不干脆
更改您的表\u table modify password\u column varchar2(100字节)
?我不知道,我想使用这个knex.schema.raw('alter table MYTABLE modify MYCOLUMN varchar2(100)')。它能用吗?不知道,抱歉,因为我不知道node.js和“knex.schema.raw”是我以前从未见过的东西。但是,就Oracle本身而言,这样一个命令是可行的。为什么要“使用这个knex.schema.raw”?为什么像@LittlefootI建议的那样,你这么执着于使用某个框架来发布一个简单、单一、一次性的SQL语句?我在一个使用Node.js、Knex.js和Oracle Db的项目中工作,所以基本上我想创建一个迁移文件,以便在运行应用程序后将大小设置为255。我不知道是否还有其他想法。这意味着如果您在没有默认值的情况下创建了不可为null的列
t.string(…).notNull()
则执行
t.string(…)…defaultTo('foo').alter()
将使用默认值“foo”将其更改为可为null。因此,增量更改不会起作用,但它会覆盖整个旧列声明(我不确定此解释是否比文档中的解释更清楚)。不太清楚。在Oracle数据库中,如果我使用
创建表t(c varchar2(30)非null)创建表
然后使用
alter table t modify c varchar2(100)更改列
,not null约束没有丢失。那么Knex.js做了什么导致它丢失了呢?对于postgresql,它首先删除所有约束/默认值,然后更改列类型,最后添加新声明的约束和默认值。对于mysql,它还使用
alter table modify…
,据我所知,它也会完成red列的eclaration包括,所以旧的
notnull
default value
被隐式删除。然而,可能实际上oracle的工作方式不同,knex中存在一个bug,正确生成的alter类似于
alter table t modify c varchar2(100)null default null
删除null和“删除“默认值”。