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

Ubah jenis bidang varchar ke integer:tidak dapat dilemparkan secara otomatis ke tipe integer

Tidak ada pemeran implisit (otomatis) dari text atau varchar ke integer (yaitu Anda tidak dapat melewati varchar ke fungsi yang mengharapkan integer atau tetapkan varchar bidang ke integer satu), jadi Anda harus menentukan pemeran eksplisit menggunakan ALTER TABLE ... ALTER COLUMN ... TYPE ... MENGGUNAKAN:

ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (col_name::integer);

Perhatikan bahwa Anda mungkin memiliki spasi di bidang teks Anda; dalam hal ini, gunakan:

ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (trim(col_name)::integer);

untuk menghapus spasi sebelum mengonversi.

Ini seharusnya sudah jelas dari pesan kesalahan jika perintah dijalankan di psql , tetapi ada kemungkinan PgAdmin-III tidak menunjukkan kesalahan penuh kepada Anda. Inilah yang terjadi jika saya mengujinya di psql pada PostgreSQL 9.2:

=> CREATE TABLE test( x varchar );
CREATE TABLE
=> insert into test(x) values ('14'), (' 42  ');
INSERT 0 2
=> ALTER TABLE test ALTER COLUMN x TYPE integer;
ERROR:  column "x" cannot be cast automatically to type integer
HINT:  Specify a USING expression to perform the conversion. 
=> ALTER TABLE test ALTER COLUMN x TYPE integer USING (trim(x)::integer);
ALTER TABLE        

Terima kasih @muistooshort telah menambahkan USING tautan.

Lihat juga pertanyaan terkait ini; ini tentang migrasi Rails, tetapi penyebab dasarnya sama dan jawabannya berlaku.

Jika kesalahan masih terjadi, maka itu mungkin tidak terkait dengan nilai kolom, tetapi indeks di atas kolom atau nilai default kolom ini mungkin gagal typecast. Indeks harus dibuang sebelum ALTER COLUMN dan dibuat ulang setelahnya. Nilai default harus diubah dengan tepat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. org.hibernate.internal.util.config.ConfigurationException:Tidak dapat menemukan sumber daya cfg.xml [/HibernateTest/src/hibernate.cfg.xml]

  2. Tidak dapat terhubung ke PostgreSQL lokal

  3. Tambahkan kolom stempel waktu dengan default SEKARANG () hanya untuk baris baru

  4. Antrian pekerjaan sebagai tabel SQL dengan banyak konsumen (PostgreSQL)

  5. Kesalahan:pg_config executable tidak ditemukan saat menginstal psycopg2 di Alpine di Docker