Manually convert a specific chunk in the hypertable columnstore to the rowstore.

If you need to modify or add a lot of data to a chunk in the columnstore, best practice is to stop any jobs moving chunks to the columnstore, convert the chunk back to the rowstore, then modify the data. After the update, convert the chunk to the columnstore and restart the jobs. This workflow is especially useful if you need to backfill old data.

Since TimescaleDB v2.18.0

To modify or add a lot of data to a chunk:

  1. Stop the jobs that are automatically adding chunks to the columnstore

    Retrieve the list of jobs from the timescaledb_information.jobs view to find the job you need to alter_job.

    SELECT alter_job(JOB_ID, scheduled => false);
  2. Convert a chunk to update back to the rowstore

    CALL convert_to_rowstore('_timescaledb_internal._hyper_2_2_chunk');
  3. Update the data in the chunk you added to the rowstore

    Best practice is to structure your INSERT statement to include appropriate partition key values, such as the timestamp. TimescaleDB adds the data to the correct chunk:

    INSERT INTO metrics (time, value)
    VALUES ('2025-01-01T00:00:00', 42);
  4. Convert the updated chunks back to the columnstore

    CALL convert_to_columnstore('_timescaledb_internal._hyper_1_2_chunk');
  5. Restart the jobs that are automatically converting chunks to the columnstore

    SELECT alter_job(JOB_ID, scheduled => true);
NameTypeDefaultRequiredDescription
chunkREGCLASS-Name of the chunk to be moved to the rowstore.
if_compressedBOOLEANtrueSet to false so this job fails with an error rather than an warning if chunk is not in the columnstore

Keywords

Found an issue on this page?Report an issue or Edit this page in GitHub.