tipos - Modificar el tipo de una columna en sqlite3
tipos de datos que acepta sqlite (4)
Es posible recreando la tabla. Su trabajo para mí sigue el siguiente paso:
- crea una tabla temporal usando como seleccionar * de tu mesa
- suelta tu tabla, crea tu tabla usando el tipo de columna de modificación
- ahora inserte registros de la tabla temporal en su tabla recién creada
- soltar tabla temporal
realice todos los pasos anteriores en el subproceso de trabajo para reducir la carga en uithread
Soy bastante nuevo en SQLite 3 y ahora tenía que agregar una columna a una tabla existente que tenía. Fui a hacer eso haciendo: ALTER TABLE thetable ADD COLUMN category;
.
Por supuesto, olvidé especificar el tipo de columna. Lo primero que pensé hacer fue dejar caer esa columna y luego volver a agregarla. Sin embargo, parece que SQLite no tiene una forma simple de hacer esto, y yo tendría que hacer una copia de seguridad de la tabla y volver a crearla sin la columna.
Esto parece desordenado, y me preguntaba si habría alguna forma de modificar / agregar el tipo de una columna. Me lo imaginaba, pero mi búsqueda no arrojó ningún resultado, siendo nuevo en SQLite, imagino que fue debido a que mi redacción no estaba en la consulta.
SQLite no es compatible con la eliminación o modificación de columnas, al apparently . Pero recuerde que los tipos de datos de columna tampoco son rígidos en SQLite.
Ver también:
Si prefiere una GUI, DB Browser para SQLite lo hará con unos pocos clics.
- "Archivo" - "Abrir base de datos"
- En la pestaña "Estructura de la base de datos", haga clic en el contenido de la tabla (no en el nombre de la tabla), luego en el menú "Editar", "Modificar tabla", y ahora puede cambiar el tipo de datos de cualquier columna con un menú desplegable. Cambié un campo de ''texto'' a ''numérico'' para recuperar datos en un rango numérico.
DB Browser for SQLite es de código abierto y gratuito. Para Linux está disponible desde el repositorio.
#!/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