PostgresqlのCardinalityViolationエラーの解決方法

Rails6で実装されたActiveRecord#upsert_allでバルクアップデートをしようとすると ActiveRecord::StatementInvalid: PG::CardinalityViolation: ERROR: ON CONFLICT DO UPDATE コマンドは行に再度影響を与えることはできません HINT: 同じコマンドでの挿入候補の行が同じ制約値を持つことがないようにしてください とエラーが出たけどCardinalityViolationの意味がわからなかったので調べてみました。 ...

2022-06-07 · ironsand

Macで複数のバージョンのpostgresqlをインストールして使う

最近のプログラミング言語はrbenvやanyenvなど複数のバージョンを共存して使うためのツールが用意されてる事が多いですが、PostgreSQLなどのデータベース環境にはまだデファクトスタンダードのものがないようです。Dockerを使えばいいのかもしれませんが、MacOSでは非常に遅くできるだけ避けたいのでHomebrewでサードパーティのフォーミュラを使った方法を紹介します。 ...

2021-04-01 · ironsand

Railsで使うpostgresqlのスーパーユーザーを作成する

RailsでPostgresqlを使うときに毎回そのためのユーザーの作成方法を忘れてしまうのでメモ。 まずユーザーを作成 WindowsでChocolateyを使ってpostgresqlをインストールしてると初期パスワードはPostgres1234になってるので、 $ psql.exe -U postgres ユーザ postgres のパスワード: ←ここでパスワードを入力 psql (9.2.1) "help" でヘルプを表示します. postgres=# create user deployer; CREATE ROLE postgres=# alter user deployer with superuser; ALTER ROLE これでパスワード無しのdeployerユーザーが必要な権限付きで作成される。 ※ Linux系のOSならsudo -u postgres psqlでpsqlコマンドを使いましょう。 パスワード無しユーザーでもOKにする これだけだとfe_sendauth: no password suppliedというエラーが出てしまうので C:\PostgreSQL\data\pg_hba.confを開いて # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 を # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust に書き換える。 ...

2014-04-25 · 鉄