Rails6で実装されたActiveRecord#upsert_allでバルクアップデートをしようとすると

ActiveRecord::StatementInvalid: PG::CardinalityViolation: ERROR: ON CONFLICT DO UPDATE コマンドは行に再度影響を与えることはできません HINT: 同じコマンドでの挿入候補の行が同じ制約値を持つことがないようにしてください

とエラーが出たけどCardinalityViolationの意味がわからなかったので調べてみました。

続きを読む

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

続きを読む

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 に書き換える。

続きを読む

プロフィール画像

ironsand

語学好きのプログラマーです

Railsエンジニア

Yokohama