Saya menambahkan kolom "NOT NULL" baru ke basis data Postgresql saya menggunakan kueri berikut (disanitasi untuk Internet):
ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) NOT NULL;
Setiap kali saya menjalankan kueri ini, saya menerima pesan galat berikut:
ERROR: column "mycolumn" contains null values
Saya bingung. Di mana saya salah?
CATATAN: Saya menggunakan pgAdmin III (1.8.4) terutama, tetapi saya menerima kesalahan yang sama ketika saya menjalankan SQL dari dalam Terminal.
sql
postgresql
alter-table
Huuuze
sumber
sumber
man ALTER_TABLE
:)Seperti yang telah diamati orang lain, Anda harus membuat kolom yang dapat dibatalkan atau memberikan nilai DEFAULT. Jika itu tidak cukup fleksibel (misalnya jika Anda membutuhkan nilai baru untuk dihitung untuk setiap baris secara terpisah), Anda dapat menggunakan fakta bahwa di PostgreSQL, semua perintah DDL dapat dieksekusi di dalam suatu transaksi:
sumber
Karena baris sudah ada di tabel,
ALTER
pernyataan berusaha memasukkanNULL
ke kolom yang baru dibuat untuk semua baris yang ada. Anda harus menambahkan kolom sebagai memungkinkanNULL
, lalu isi kolom dengan nilai yang Anda inginkan, dan kemudian setelNOT NULL
setelahnya.sumber
Anda juga perlu mendefinisikan default, atau melakukan apa yang Sean katakan dan menambahkannya tanpa batasan nol sampai Anda mengisinya pada baris yang ada.
sumber
Menentukan nilai default juga akan berfungsi, dengan asumsi nilai default sesuai.
sumber
Atau, buat tabel baru sebagai temp dengan kolom tambahan, salin data ke tabel baru ini sambil memanipulasi seperlunya untuk mengisi kolom baru yang tidak dapat dibatalkan, dan kemudian menukar tabel melalui perubahan nama dua langkah.
Ya, ini lebih rumit, tetapi Anda mungkin perlu melakukannya dengan cara ini jika Anda tidak ingin pembaruan besar di tabel langsung.
sumber
kueri ini akan memperbarui nol secara otomatis
sumber
Ini bekerja untuk saya: :)
sumber
NOT NULL
batasan pada kueri Anda. Tentu saja berhasil.