エラーが発生した場合デフォルト値がNULLのNOTNULL列を追加できません neutronデータベースにデータを入力または同期しているときに、修正する方法は次のとおりです。解決策を確認する前に、エラーのスナップショットを確認してください。
# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) Cannot add a NOT NULL column with default value NULL [SQL: u'ALTER TABLE address_scopes ADD COLUMN ip_version INTEGER NOT NULL']
私のOpenStackインストールはMySQLデータベースを使用しているため、エラーは奇妙ですが、エラーはSQLiteと表示されます。
解決策:
私のインストールではMySQLデータベースを使用することになっているため、 neuront.confをすばやく確認しました。 接続変数が正しく設定されているかどうかを確認するためのファイル。驚いたことに、SQLiteを指す追加の接続変数があり、それが私の場合の原因でした。
# vim /etc/neutron/neutron.conf
[database] connection = mysql+pymysql://neutron:osneutron@controller/neutron The SQLAlchemy connection string to use to connect to the database. (string # value) # Deprecated group/name - [DEFAULT]/sql_connection # Deprecated group/name - [DATABASE]/sql_connection # Deprecated group/name - [sql]/connection connection = sqlite:////var/lib/neutron/neutron.sqlite
したがって、解決策は、sqliteを指している接続変数をコメントアウトすることでした。
# connection = sqlite:////var/lib/neutron/neutron.sqlite
それでおしまい! sqliteが列を追加できなかった理由を知りたい場合はaddress_scopes 既存のテーブルに対してNOTNULLとして制約がある場合、その理由は次のとおりです。
SQLite ALTER TABLEドキュメントによると、NOT NULL制約が指定されている場合、列にはNULL以外のデフォルト値が必要です。