ALTER COLUMN em sqlite

Como faço para alterar a coluna no sqlite? Isso está no Postgresql

 ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL; 

Eu acredito que não há ALTER COLUMN no sqlite, apenas o ALTER TABLE é suportado.

Qualquer ideia? Obrigado!

Não há ALTER COLUMN no sqlite.

Eu acredito que sua única opção é:

  • Renomeie a tabela para um nome temporário
  • Crie uma nova tabela sem a restrição NOT NULL
  • Copie o conteúdo da tabela antiga para a nova
  • Remova a tabela antiga

Esta outra resposta Stackoverflow explica o processo em detalhes

Embora seja verdade que o não é ALTER COLUMN, se você quiser apenas renomear a coluna, solte a restrição NOT NULL ou altere o tipo de dados, é possível usar o seguinte conjunto de comandos perigosos:

 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; 

Você precisará fechar e reabrir sua conexão ou limpar o database para recarregar as alterações no esquema.

Por exemplo:

 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** 

REFERÊNCIAS SIGA:


pragma writable_schema
Quando esse pragma está ativado, as tabelas SQLITE_MASTER nas quais o database pode ser alterado usando as instruções comuns UPDATE, INSERT e DELETE. Aviso: o uso indevido deste pragma pode facilmente resultar em um arquivo de database corrompido.

[alter table] (De http://www.sqlite.org/lang_altertable.html )
O SQLite suporta um subconjunto limitado de ALTER TABLE. O comando ALTER TABLE no SQLite permite ao usuário renomear uma tabela ou adicionar uma nova coluna a uma tabela existente. Não é possível renomear uma coluna, remover uma coluna ou adicionar ou remover restrições de uma tabela.

SINTAXE ALTER TABLE

O SQLite suporta um subconjunto limitado de ALTER TABLE. O comando ALTER TABLE no SQLite permite ao usuário renomear uma tabela ou adicionar uma nova coluna a uma tabela existente. Não é possível renomear uma coluna, remover uma coluna ou adicionar ou remover restrições de uma tabela. Mas você pode alterar o tipo de dados da coluna da tabela ou outra propriedade seguindo as etapas a seguir.

  1. COMECE A TRANSAÇÃO;
  2. CREATE TEMPORARY TABLE t1_backup (a, b);
  3. INSERT INTO t1_backup SELECT a, b FROM t1;
  4. TABELA DE QUEDA t1;
  5. CREATE TABLE t1 (a, b);
  6. INSERT INTO t1 SELECIONE a, b FROM t1_backup;
  7. DROP TABLE t1_backup;
  8. COMPRAR

Para mais detalhes, você pode consultar o link .