How to create a TSVECTOR column in a materialized view?
Why don't you drop the materialized view ,and recreate it in a transaction? You can't update a materialized view. They're a view that's been written to disk.

Instead of 

CREATE MATERIALIZED VIEW mv AS 
   SELECT id, CAST ('' AS tsvector) AS textsearchable_index_col
   FROM tbl
[...]
UPDATE mv SET textsearchable_index_col = to_tsvector('english', coalesce(title,''))


Just do

BEGIN;
  DROP MATERIALIZED VIEW IF EXISTS mv;
  CREATE MATERIALIZED VIEW mv AS 
     SELECT
       id,
       textsearchable_index_col = to_tsvector('english', coalesce(title,''))
     FROM tbl
COMMIT;


You don't have to have a materialized view for this though, yo can create a functional index which will work on the table directly

CREATE INDEX ON tbl USING GIN (to_tsvector('english', title));


Or, just use the default cast..

CREATE INDEX ON tbl USING GIN ((title::tsvector));


And then depending, on your index condition,

SELECT * FROM tbl
WHERE 'foo &amp; bar' @@ to_tsvector('english', title);

SELECT * FROM tbl
WHERE 'foo &amp; bar' @@ title::tsvector;