Note that in the CLI you will also have to turn off `defensive mode` if it is turned on before you can do this because `defensive mode` provides additional suspenders to prevent illicit modification of the database. ``` SQLite version 3.36.0 2021-04-03 23:27:49 Enter ".help" for usage hints. Connected to a transient in-memory database. Use ".open FILENAME" to reopen on a persistent database. sqlite> PRAGMA writable_schema = 1; sqlite> CREATE TABLE temp.sqlite_parameters(key TEXT PRIMARY KEY, value) WITHOUT ROWID; Error: object name reserved for internal use: sqlite_parameters sqlite> .dbconfig defensive on dqs_ddl off dqs_dml off enable_fkey on enable_qpsg off enable_trigger on enable_view on fts3_tokenizer off legacy_alter_table off legacy_file_format off load_extension on no_ckpt_on_close off reset_database off trigger_eqp off trusted_schema off writable_schema on sqlite> .dbconfig defensive off defensive off sqlite> CREATE TABLE temp.sqlite_parameters(key TEXT PRIMARY KEY, value) WITHOUT ROWID; sqlite> .dbconfig defensive on defensive on sqlite> PRAGMA writable_schema = 0; sqlite> ``` Note that the `.param init` basically follows the above sequence internally. It enables `writable_schema`, turns off `defensive mode`, creates the table, then restores `writable_schema` and `defensive mode` to the state they were in before executing the command.