PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Mengubah tipe kolom menjadi string yang lebih panjang di Rails

Anda harus menggunakan text dengan Rails jika Anda menginginkan string tanpa batas panjang. Migrasi seperti ini:

def up
  change_column :your_table, :your_column, :text
end
def down
  # This might cause trouble if you have strings longer
  # than 255 characters.
  change_column :your_table, :your_column, :string
end

harus menyelesaikan masalah. Anda mungkin ingin :null => false atau beberapa opsi lain di akhir itu juga.

Saat Anda menggunakan string kolom tanpa batas eksplisit, Rails akan menambahkan :limit => 255 implicit implisit . Tetapi jika Anda menggunakan text , Anda akan mendapatkan jenis string panjang arbitrer apa pun yang didukung database. PostgreSQL memungkinkan Anda untuk menggunakan varchar kolom tanpa panjang tetapi sebagian besar basis data menggunakan tipe terpisah untuk itu dan Rails tidak tahu tentang varchar tanpa panjang. Anda harus menggunakan text di Rails untuk mendapatkan text kolom di PostgreSQL. Tidak ada perbedaan dalam PostgreSQL antara kolom dengan tipe text dan salah satu dari jenis varchar (tetapi varchar(n) adalah berbeda). Selanjutnya, jika Anda menerapkan di atas PostgreSQL, tidak ada alasan untuk menggunakan :string (AKA varchar ) sama sekali, database memperlakukan text dan varchar(n) sama secara internal kecuali untuk batasan panjang ekstra untuk varchar(n); anda hanya boleh menggunakan varchar(n) (AKA :string ) jika Anda memiliki batasan eksternal (seperti formulir pemerintah yang menyatakan bahwa bidang 432 pada formulir 897/B akan memiliki panjang 23 karakter) pada ukuran kolom.

Sebagai tambahan, jika Anda menggunakan string kolom di mana saja, Anda harus selalu menentukan :limit sebagai pengingat untuk diri sendiri bahwa ada batas dan Anda harus memiliki validasi dalam model untuk memastikan bahwa batas tersebut tidak terlampaui. Jika Anda melebihi batas, PostgreSQL akan mengeluh dan mengajukan pengecualian, MySQL akan diam-diam memotong string atau mengeluh (tergantung pada konfigurasi server), SQLite akan membiarkannya berjalan apa adanya, dan database lain akan melakukan sesuatu yang lain (mungkin mengeluh) .

Selain itu, Anda juga harus mengembangkan, menguji, dan menerapkan di atas database yang sama (yang biasanya berupa PostgreSQL di Heroku), Anda bahkan harus menggunakan versi server database yang sama. Ada perbedaan lain antara database (seperti perilaku GROUP BY) yang tidak akan diisolasi dari ActiveRecord Anda. Anda mungkin sudah melakukan ini, tetapi saya pikir saya akan tetap menyebutkannya.

Perbarui :Versi ActiveRecord yang lebih baru memahami varchar tanpa batas jadi, dengan PostgreSQL setidaknya, Anda dapat mengatakan:

change_column :your_table, :your_column, :string, limit: nil

untuk mengubah varchar(n) kolom ke varchar . text dan varchar masih hal yang sama sejauh menyangkut PostgreSQL tetapi beberapa pembuat formulir akan memperlakukannya secara berbeda:varchar mendapat <input type="text"> sedangkan text mendapat <textarea> multi multi-baris .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah prosedur tersimpan berjalan dalam transaksi basis data di Postgres?

  2. Menerapkan Pengaturan Multi-Pusat Data untuk PostgreSQL - Bagian Satu

  3. mysql_insert_id alternatif untuk postgresql

  4. Solusi Cloud PostgreSQL Terkelola Tolok Ukur - Bagian Satu:Amazon Aurora

  5. SQLAlchemy, Psycopg2 dan Postgresql COPY