Saya memiliki meja kecil dan bidang tertentu berisi tipe " karakter yang bervariasi ". Saya mencoba mengubahnya ke " Integer " tetapi memberikan kesalahan bahwa casting tidak mungkin.
Apakah ada cara mengatasi ini atau haruskah saya membuat tabel lain dan membawa catatan ke dalamnya menggunakan kueri.
Bidang ini hanya berisi nilai integer.
SQL error: ERROR: column "MID" cannot be cast to type integer
SELECT
daftar yang diberi nama secara eksplisit , tidak bergantung pada posisi ordinal kolom. Yang mengatakan, pendekatan yang diberikan dalam jawaban akan mempertahankan posisi kolom.Jawaban:
Tidak ada pemeran implisit (otomatis) dari
text
atauvarchar
keinteger
(yaitu Anda tidak bisa meneruskanvarchar
fungsi ke mengharapkaninteger
atau menetapkanvarchar
bidang keinteger
salah satu), jadi Anda harus menentukan pemeran eksplisit menggunakan ALTER TABLE ... ALTER COLUMN ... TYPE. .. MENGGUNAKAN :Perhatikan bahwa Anda mungkin memiliki ruang kosong di bidang teks Anda; dalam hal ini, gunakan:
untuk menghapus ruang putih sebelum mengkonversi.
Ini seharusnya sudah jelas dari pesan kesalahan jika perintah dijalankan
psql
, tetapi mungkin PgAdmin-III tidak menunjukkan kepada Anda kesalahan penuh. Inilah yang terjadi jika saya mengujinya dipsql
PostgreSQL 9.2:Terima kasih @muistooshort karena menambahkan
USING
tautan.Lihat juga pertanyaan terkait ini ; ini tentang migrasi Rails, tetapi penyebab dasarnya adalah sama dan jawabannya berlaku.
Jika kesalahan masih terjadi, maka itu mungkin terkait bukan dengan nilai kolom, tetapi indeks di atas kolom ini atau nilai default kolom mungkin gagal typecast. Indeks harus dijatuhkan sebelum ALTER COLUMN dan dibuat kembali sesudahnya. Nilai default harus diubah dengan tepat.
sumber
psql
jauh lebih cepat dan lebih mudah. Saya menulis sedikit kata-kata kasar tentang kegunaan PgAdmin sehubungan dengan backup dan restore beberapa waktu lalu: blog.ringerc.id.au/2012/05/…ini bekerja untuk saya.
ubah kolom varchar ke int
dapatkan:
chnged ke
sumber
Anda dapat melakukannya seperti:
atau coba ini:
Jika Anda tertarik untuk menemukan lebih banyak tentang topik ini, baca artikel ini: https://kolosek.com/rails-change-database-column
sumber
Coba ini, pasti akan berhasil.
Saat menulis migrasi Rails untuk mengonversi kolom string ke integer, Anda biasanya akan mengatakan:
Namun, PostgreSQL akan mengeluh:
"Petunjuk" pada dasarnya memberi tahu Anda bahwa Anda perlu mengonfirmasi bahwa Anda ingin ini terjadi, dan bagaimana data akan dikonversi. Katakan saja ini dalam migrasi Anda:
Di atas akan meniru apa yang Anda ketahui dari adaptor database lain. Jika Anda memiliki data non-numerik, hasilnya mungkin tidak terduga (tetapi Anda mengkonversi ke integer).
sumber
PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: ""
kesalahan terjadiSaya mendapat masalah yang sama. Daripada saya sadari saya memiliki nilai string default untuk kolom yang saya coba ubah. Menghapus nilai default membuat kesalahan hilang :)
sumber
Jika Anda tidak sengaja atau tidak memadukan bilangan bulat dengan data teks, Anda harus terlebih dahulu menjalankan perintah pembaruan di bawah ini (jika tidak di atas tabel ubah akan gagal):
sumber
regexp_replace(col_name, '[^0-9.]','','g')
jika Anda mencoba untuk menghapus karakter yang tidak diinginkan dan ruang putih. Anda akan memerlukan sesuatu yang sedikit lebih canggih jika Anda ingin mempertahankanNaN
danInf
dan10E42
notasi ilmiah.Jika Anda bekerja di lingkungan pengembangan (atau untuk lingkungan produksi mungkin merupakan cadangan data Anda), pertama-tama hapus data dari bidang DB atau tetapkan nilainya sebagai 0.
Setelah itu jalankan query di bawah ini dan setelah berhasil menjalankan query, ke schemamigration dan setelah itu jalankan skrip migrasi.
Saya pikir itu akan membantu Anda.
sumber
Saya memiliki masalah yang sama. Saya mulai mengatur ulang default kolom.
sumber