13 - migration notes
Database GUI
上個專案跟這個專案剛好 db 都是用 mysql,分享一下匯入資料的方法,還有一些 migration 問題的一些筆記,另外個人滿推以下兩種 database 的 GUI:
兩者都滿好用的也其實都差不多,因為同事都用 Sequal Pro 還有個人剛好也偏好,所以後來主要都是用 Sequal Pro。
連結的方式也很容易,點選左下角的 +
號來新增 new favorite
database 名稱,還有設定一些 config 來連結即可,最常用的大概就是把 staging/production 的 database 弄到 local 來重現問題。
點選 export 後選取需要的 table 並輸出 SQL file,詳細的其他需求就看當下需要的使用情況。
import sql to database in local
1
| mysql -u root `database_name` < ~/Desktop/export_database_name_with_date_time.sql
|
database_name
看要匯入的資料庫是哪一個?對應各個 database 後的 ENV 名稱,Rails 6 也支援 multiple database,詳細可以參考 active_record_multiple_databases
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
default: &default writer: adapter: mysql2 encoding: utf8mb4 pool: 20 host: <%= ENV['DATABASE_WRITER_HOST'] %> database: <%= ENV['DATABASE_NAME'] %> username: <%= ENV['DATABASE_USER'] %> password: <%= ENV['DATABASE_PASS'] %> charset: utf8 reader: adapter: mysql2 encoding: utf8mb4 pool: 20 host: <%= ENV['DATABASE_READER_HOST'] %> database: <%= ENV['DATABASE_NAME'] %> username: <%= ENV['DATABASE_USER'] %> password: <%= ENV['DATABASE_PASS'] %> charset: utf8 anotherdb: adapter: mysql2 encoding: utf8 pool: 20 host: <%= ENV['ANOTHERDB_HOST'] %> database: <%= ENV['ANOTHERDB_NAME'] %> username: <%= ENV['ANOTHERDB_USER'] %> password: <%= ENV['ANOTHERDB_PASS'] %> migrations_paths: "db/anotherdb_migrate"
|
Add column after specific field
時不時會有新的欄位需要新增的到舊有的 table 裡面,但預設 default 的都會在 updated_at
之後,不管是在 GUI 裡看或者是 console 裡面看都會滿不容易觀看的,且如果是與原本的欄位有關聯,會偏向擺在一起,因此我們可以在 migration 中帶 after
option 來告知新增在哪個欄位之後,也因為會是先跑 first_name 再跑 last_name 欄位的新增,自然而然 last_name 要新增時可以排在 first_name 之後。
1 2 3 4 5 6 7
| class AddFirstNameAndLastNameToUser < ActiveRecord::Migration[6.1] def change add_column :users, :first_name, :string, after: :id add_column :users, :last_name, :string, after: :first_name end end
|
Explicitly specify a Model’s table-name
在建立 table_name 的時候有時候剛好撞到 rails 的慣例,但又不想要取慣例的名字的時候,會需要想設定自己想要的 Table 名稱,像是名為 Index class,Rails 預設會是 indices,但可能對我們來說很不直覺,想要取叫做 indexes 比較合適
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class CreateIndexes < ActiveRecord::Migration[6.1] def change create_table :indexes do |t| t.timestamps end end end
class Index < ApplicationRecord self.table_name = "indexes" end
|
參考來源