- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列データに対する、要素の追加・削除方法)
配列データに新しい要素を追加・削除する方法
このQ&Aのポイント
- PostgreSQLの配列に要素を追加するには、UPDATE文を使用し、指定した配列に新しい要素を追加することができます。
- PostgreSQLの配列から要素を削除するには、UPDATE文を使用し、指定した要素を配列から除去することができます。
- 上記の例では、idが1のレコードのdata配列に「10」を追加し、idが2のレコードのdata配列から「6」を削除しました。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#249320
回答No.1
PostgreSQL での配列は使ったことが無いのでちょっと調べてみました。 配列要素の追加は下記のように出来るようです。 UPDATE test SET data = array_append(data, 10); UPDATE test SET data = data || ARRAY[10] しかし, マニュアルに配列要素の削除についての項目が見当たりませんでした・・・。 結構検索してみたのですがどうにも見つけられず, 配列関数としてもサポートされていないようですし, もしかしたら無いのかも? ^^; # data - ARRAY[6] とかやってもだめでした。
その他の回答 (1)
noname#249320
回答No.2
配列の要素を操作する関数が限られている以上, 配列の要素を全部サーチする以外に方法はないかと思います。 配列要素がそれなりに大きくなると負荷もあがりそうですし, 関数やプロシージャはデバッグが大変です ^^; DB側ではなくフロント側で配列を操作するか, 配列データを正規化して別テーブルに分けるかにしたほうがいいかもしれません。
お礼
array_appendという関数があったのですね。気づきませんでした。ありがとうございます^^ 除去の方は、やはり関数も無いようなので、CREATE FUNCTION に初挑戦してみました。 >>> CREATE FUNCTION array_strip(integer[], integer) RETURNS integer[] AS ' DECLARE src ALIAS FOR $1; val ALIAS FOR $2; dst integer[] := ''{}''; i integer; BEGIN FOR i IN array_lower(src,1) .. array_upper(src,1) LOOP IF src[i] != val THEN dst := array_append(dst, src[i]); END IF; END LOOP; RETURN dst; END; ' LANGUAGE 'plpgsql'; UPDATE test SET data = array_append(data, 10) WHERE id = 1; UPDATE test SET data = array_strip(data, 6) WHERE id = 2; <<< 以上のようになりましたが、もっと効率の良い方法、ありますかね…。