如何使用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更好。