我的Postgres数据库中有一个表,其中包含一个数据类型为ARRAY
的列。我正在使用Bookshelf对数据库执行操作。现在,我想在此列中插入/更新(将新数据附加到数组中的先前数据)数据,但我找不到这样做的方法。任何人都可以指导我如何实现这一目标吗?
我认为,这样做的一种方法可能是使用Knex的raw()
功能,但我不确定如何使用raw()
功能,所以请指导我。
感谢。
答案 0 :(得分:1)
我找到了解决此问题的方法here。看来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
});
希望这有助于将来的其他人。
答案 1 :(得分:0)
假设有以下表格架构
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 functions使用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
列不是原子的,因此此表架构不符合第一范式(违反1NF)。过滤掉data
列中的值会更加困难。例如,您不能轻易使用WHERE
子句。考虑调整表模式以至少遵守1NF,更好的3NF。
答案 2 :(得分:0)
UPDATE tableName SET ColumnName = array_prepend('Value',ColumnName) WHERE ColumnName ='Value'
更新tblTest SET TestColumnName = array_prepend('TestData',TestColumnName) 在哪里TestColumnId ='1'