2017-06-22 111 views
1

我在Postgres數據庫中有一張表,其中包含一個數據類型爲ARRAY的列。我正在使用Bookshelf在數據庫上執行操作。現在,我想在此列中插入/更新(將新數據附加到數組中的以前的數據),並且我找不到一種方法來執行此操作。任何人都可以指導我如何實現這一目標? 我認爲,這樣做的一種方法可能是使用Knex的raw()函數,但我不確定如何使用raw()函數,所以請引導我。 謝謝。如何使用書架/ Knex在Postgres中插入/更新`ARRAY`列

回答

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 functionsarray_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更好。

+0

感謝您的回覆。我知道這些「數組函數」,但我想使用BookshelfJS和KnexJS來實現這一點。你能指導我嗎? –