我在Postgres数据库中有一张表,其中包含一个数据类型为ARRAY
的列。我正在使用Bookshelf在数据库上执行操作。现在,我想在此列中插入/更新(将新数据附加到数组中的以前的数据),并且我找不到一种方法来执行此操作。任何人都可以指导我如何实现这一目标? 我认为,这样做的一种方法可能是使用Knex的raw()
函数,但我不确定如何使用raw()
函数,所以请引导我。 谢谢。如何使用书架/ Knex在Postgres中插入/更新`ARRAY`列
1
A
回答
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
});
希望这可以帮助其他人在未来。
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更好。
相关问题
- 1. 如何使用Knex将唯一的数据插入到Postgres中?
- 2. 如何返回并更新书架中的表knex
- 3. 如何在clojure中使用yesql插入和更新postgres数组?
- 4. Knex数据未插入的Postgres
- 5. 使用to_char插入,更新或更改postgres中的列
- 6. Postgres/Knex“在表格上插入或更新”位置“违反了外键约束”
- 7. 如何在使用knex和书架查询时如何使用'<>'和'whereNotIn'?
- 8. Postgres的使用书架
- 9. 如何在Postgres表中插入新行?
- 10. 插入到数据库中使用knex
- 11. 如何在书架上批量“插入”?
- 12. 在表上插入或更新违反外键约束PSQL/Knex
- 13. 如何在.fetchAll书架js + knex js之后遍历行?
- 14. 书架和knex初始化错误
- 15. 书架/ knex多个表之间的InnerJoin
- 16. 在postgres插入期间触发更新列
- 17. Postgres插入到冲突执行更新
- 18. 如何使用实体框架同时更新/插入?
- 19. Postgres的更新规则不会插入
- 20. Postgres的功能,插入和更新
- 21. 在linux中插入数据时在postgres列中保留新行
- 22. 用python插入Postgres DB列
- 23. 如何使用node-postgres插入多行?
- 24. 插入或更新过程的Postgres 9.2
- 25. 如何在使用插入选择时基于插入的ID更新列?
- 26. 使用Postgres快速阵列插入
- 27. 如何使用inversify注入knex?
- 28. 如何使用PLAN更新或插入
- 29. 在knex迁移中运行更新
- 30. 书架,Knex和MySQL保存对象的列表
感谢您的回复。我知道这些“数组函数”,但我想使用BookshelfJS和KnexJS来实现这一点。你能指导我吗? –