我在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來實現這一點。你能指導我嗎? –