Postgresql

28 Jul 2024

20240728

Postgresql では auto_increment が効かない rails db:reset && rails db:migrate してから Model.create() すると id が入るけど、 既存のデータをリストアすると id が nil になってしまう問題に悩まされている。 これでもダメ。 def change remove_column :mytables, :id add_column :mytables, :id, :integer, primary_key: true, null: false, autoincrement: true end この例を参考に .maximum(:id).next.to_i したらリストアしてからも id が入るようになったけど こんなんが本当に必要なのか? auto increment は MySQL の方言とかいう人もいるし。もう少し調べてみるか。 https://stackoverflow.com/questions/40545281/autoincrement-postgre-db-id-field-in-rails

27 Jul 2024

20240727

PostgreSQL のダンプデータからテーブル名を別名にしてリストアする 既存の Rails アプリをいちから作り直しているうちに、だいぶ形になってきた。 すでにデータは既存のアプリにあるので、そちらからテーブル名を別名にしてリストアする方法を探していたが、以下に落ち着いた。 既存のテーブル名を sources 新規のテーブル名を destinations とする場合、一度別名でテーブルのコピーを作成する。 その後ダンプしてリストア時に別名にしたテーブルを指定すればよい。 > CREATE TABLE destinations AS SELECT * FROM sources; ➜ pg_dump -f db/development.dump.bin.postgres ${db} -Fc ➜ pg_restore -c -U rails -W -d [PROJECT_NAME]_development -t destinations development.dump.bin.postgres