0

「Route」と呼ばれるテーブルがあります(実稼働のpostgresデータベースの一部)。「arrival_time」列が欠落しているため、phpPgAdmin の「列の追加」機能を使用しました。そこに、それぞれの重要なプロパティ (名前、型) を追加しました。作成後に列を参照すると、値が自動的に作成されます。

arrival_time | count
--------------------
NULL         | 9358

このため、制約「NOT_NULL」を設定できませんが、これは必須です。この自動的に作成された値の理由は何ですか? また、この問題を回避または修正するにはどうすればよいですか?

4

1 に答える 1

2

これは phpPgAdmin の問題ではありません。新しい列を追加するかNULL(これがデフォルトです)、またはNOT NULL制約DEFAULT句を追加する必要があります。どちらも存在しない場合、PostgreSQL は既存の行をどう処理するかわかりません。

で列を追加するとADD COLUMN、テーブル内のすべての既存の行が列のデフォルト値で初期化されます (句が指定されNULLていない場合)。DEFAULT句がないDEFAULT場合、これは単なるメタデータの変更であり、テーブルのデータをすぐに更新する必要はありません。加算されたNULL値は、代わりに読み出し時に提供されます。

すでに列を追加している場合は、単一UPDATEを使用して既存のすべての行を開始値に設定できます。

UPDATE table SET arrival_time = NOW();

その後、NOT NULLこの列に制約を追加できます。

于 2015-01-21T12:54:22.583 に答える