Je suis assez nouveau dans SQLite 3 et je viens de devoir ajouter une colonne à une table existante que j'avais. J'ai fait ça en faisant: ALTER TABLE thetable ADD COLUMN category;
.
Bien sûr, j'ai oublié de spécifier le type de cette colonne. La première chose que je pensais faire était de supprimer cette colonne, puis de la rajouter. Cependant, il semble que SQLite ne dispose pas d'un moyen simple de le faire, et j'aurais dû sauvegarder la table et la recréer sans la colonne.
Cela semble désordonné, et je me demandais s'il y avait juste un moyen de modifier/ajouter le type d'une colonne. J'imagine que oui, mais ma recherche n'a donné aucun résultat, étant nouveau pour SQLite, j'imagine que cela était dû à mon libellé incorrect dans la requête.
SQLite ne prend pas en charge la suppression ou la modification des colonnes, apparemment . Mais n'oubliez pas que les types de données de colonne ne sont pas rigides dans SQLite, non plus.
Voir également:
Si vous préférez une interface graphique, DB Browser for SQLite le fera en quelques clics.
DB Browser for SQLite est open source et gratuit. Pour Linux, il est disponible à partir du référentiel.
Il est possible en recréant la table.Son travail pour moi, veuillez suivre l'étape suivante:
faire toutes les étapes ci-dessus dans le thread de travail pour réduire la charge sur uithread
#!/bin/bash
DB=/tmp/synapse/homeserver.db
TABLE="public_room_list_stream"
FIELD=visibility
OLD="BOOLEAN NOT NULL"
NEW="INTEGER NOT NULL"
TMP=/tmp/sqlite_$TABLE.sql
echo "### create dump"
echo ".dump '$TABLE'" | sqlite3 "$DB" >$TMP
echo "### editing the create statement"
sed -i "s|$FIELD $OLD|$FIELD $NEW|g" $TMP
read -rsp $'Press any key to continue deleting and recreating the table $TABLE ...\n' -n1 key
echo "### rename the original to '$TABLE"_backup"'"
sqlite3 "$DB" "PRAGMA busy_timeout=20000; ALTER TABLE '$TABLE' RENAME TO '$TABLE"_backup"'"
echo "### delete the old indexes"
for idx in $(echo "SELECT name FROM sqlite_master WHERE type == 'index' AND tbl_name LIKE '$TABLE""%';" | sqlite3 $DB); do
echo "DROP INDEX '$idx';" | sqlite3 $DB
done
echo "### reinserting the edited table"
cat $TMP | sqlite3 $DB