web-dev-qa-db-ja.com

PostgreSQLの配列タイプの列に新しいアイテムを追加する方法

私のアプリケーションにPostgreSQLを使用しています。

タスクはこのようになります

私のアプリを使用しているユーザーがいますが、私は各ユーザーのアクティビティに基づいて通知を維持する必要があるため、ユーザーごとにたくさんの通知を受け取ります。

したがって、一般的にはすべての通知を別のテーブルに配置し、ユーザーIDでマップするので、それらをフェッチできますが、今はjson/arrayデータ型のいずれかを使用することを考えているため、通知セット全体を次のように配置できます各ユーザー行のセルに配列/ json。

Jsonと配列のどちらを保存するのが良いですか?(PHPを使用しています))

そして、2つの中から1つを選択し、10件の通知があり、11番目の通知を受け取ったとしましょう。新しい項目を配列/ jsonオブジェクトに1回の実行で追加するにはどうすればよいですか(UPDATEステートメントの場合があります)?行を選択するような基本的な方法で、既存の配列/ jsonに新しい項目を追加して(PHPでのプロセス)取得し、それを更新したくありません。ここでは、別の変更が発生する可能性がある2つの実行が行われ、データ損失が発生します。

それで、新しい要素を追加するか、PostgreSQLの配列/ jsonオブジェクト型の既存の要素/ノードを変更するだけのUPDATEクエリを実行する方法はありますか?

17
CodeRows

PostgreSQLの配列に項目を追加するには、||を使用できます。演算子またはarray_append関数。

||オペレーター

UPDATE table SET array_field = array_field || 'new item' WHERE ...

Array_append関数を使用

UPDATE table SET array_field = array_append(array_field,'new item') WHERE ...

また、このページにアクセスして配列を取得することもできます http://www.postgresql.org/docs/current/interactive/functions-array.html

Jsonデータ型でそれを行う方法がわかりません。

38
samed.yildirim