如何使用Bookshelf / Knex在Postgres中插入/更新`ARRAY`列
我在我的Postgres数据库中有一个表,其中包含一个数据types为ARRAY
的列。 我正在使用Bookshelf在数据库上执行操作。 现在,我想插入/更新(追加新的数据到数组中的以前的数据)数据在这个列中,我无法find一个方法来做到这一点。 任何人都可以指导我怎样才能做到这一点? 我认为,这样做的一种方法可能是使用Knex的raw()
函数,但我不确定如何使用raw()
函数,所以请引导我。 谢谢。
我在这里find了解决这个问题的方法。 看来BookshelfJS没有办法处理这样的操作,所以我不得不使用KnexJS。 我实现了这样的东西 –
knex('users') //users table .where('id', id) .update({ array_column_name: knex.raw('array_append(array_column_name, ?)', [data_to_append]) }) .then(function (user) { //Do something });
希望这将有助于其他人的未来。
假设下面的表架构
CREATE TABLE test (id SERIAL PRIMARY KEY, data TEXT[] NOT NULL);
与示例数据
INSERT INTO test (data) VALUES (array[ 'def', 'ghi' ]);
可以像这样查询
SELECT * FROM test ; id | data ----+----------- 1 | {def,ghi}
你可以像这样使用数组函数 array_prepend( 'abc', array )
和array_append( array, 'xyz' )
UPDATE test SET data = array_prepend( 'abc', data ); UPDATE test SET data = array_append( data, 'xyz' );
要得到
SELECT * FROM test; id | data ----+------------------- 1 | {abc,def,ghi,xyz}
你应该知道data
列不是primefaces的,因此这个表格模式不符合第一范式(违反1NF)。 过滤掉data
列中的值会更困难。 例如,您不能轻易使用WHERE
子句。 考虑调整表格模式以坚持1NF,至less3NF更好。