ALTER COLUMN dans sqlite

Comment modifier une colonne dans sqlite? Ceci est dans Postgresql

 ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL; 

Je crois qu’il n’y a pas de ALTER COLUMN dans sqlite, seule ALTER TABLE est supscope.

Une idée? Merci!

Il n’y a pas ALTER COLUMN dans sqlite.

Je crois que votre seule option est de:

  • Renommez la table en un nom temporaire
  • Créez une nouvelle table sans la contrainte NOT NULL
  • Copier le contenu de l’ancienne table dans le nouveau
  • Retirez l’ancienne table

Cette autre réponse Stackoverflow explique le processus en détail

S’il est vrai que le paramètre ALTER COLUMN n’est pas valide, si vous souhaitez uniquement renommer la colonne, supprimer la contrainte NOT NULL ou modifier le type de données, vous pouvez utiliser le jeu de commandes dangereuses suivant:

 PRAGMA writable_schema = 1; UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT NULL, publication_date TEXT)' WHERE NAME = 'BOOKS'; PRAGMA writable_schema = 0; 

Vous devrez fermer et rouvrir votre connexion ou passer au vide la firebase database pour recharger les modifications dans le schéma.

Par exemple:

 Y:\> **sqlite3 booktest** SQLite version 3.7.4 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> **create table BOOKS ( title TEXT NOT NULL, publication_date TEXT NOT NULL);** sqlite> **insert into BOOKS VALUES ("NULLTEST",null);** Error: BOOKS.publication_date may not be NULL sqlite> **PRAGMA writable_schema = 1;** sqlite> **UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT NULL, publication_date TEXT)' WHERE NAME = 'BOOKS';** sqlite> **PRAGMA writable_schema = 0;** sqlite> **.q** Y:\> **sqlite3 booktest** SQLite version 3.7.4 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> **insert into BOOKS VALUES ("NULLTEST",null);** sqlite> **.q** 

Références:


pragma writable_schema
Lorsque ce pragma est activé, les tables SQLITE_MASTER dans lesquelles la firebase database peut être modifiée à l’aide d’instructions UPDATE, INSERT et DELETE ordinaires. Attention: une mauvaise utilisation de ce pragma peut facilement entraîner un fichier de firebase database corrompu.

[alter table] (De http://www.sqlite.org/lang_altertable.html )
SQLite prend en charge un sous-ensemble limité de ALTER TABLE. La commande ALTER TABLE de SQLite permet à l’utilisateur de renommer une table ou d’append une nouvelle colonne à une table existante. Il est impossible de renommer une colonne, de supprimer une colonne ou d’append ou de supprimer des contraintes d’une table.

ALTER TABLE SYNTAX

SQLite prend en charge un sous-ensemble limité de ALTER TABLE. La commande ALTER TABLE de SQLite permet à l’utilisateur de renommer une table ou d’append une nouvelle colonne à une table existante. Il est impossible de renommer une colonne, de supprimer une colonne ou d’append ou de supprimer des contraintes d’une table. Mais vous pouvez modifier le type de données de la colonne de table ou une autre propriété en procédant comme suit.

  1. COMMENCER LA TRANSACTION;
  2. CREATE TABLE TEMPORAIRE t1_backup (a, b);
  3. INSERT INTO t1_backup SELECT a, b FROM t1;
  4. DROP TABLE t1;
  5. CRÉER LA TABLE t1 (a, b);
  6. INSERT INTO t1 SELECT a, b FROM t1_backup;
  7. DROP TABLE t1_backup;
  8. COMMETTRE

Pour plus de détails, vous pouvez consulter le lien .