Live import from a database
Unsupported in live migration
Live migration tooling is currently experimental. You may run into the following shortcomings:- Live migration does not yet support mutable columnstore compression (
INSERT,UPDATE,DELETEon data in the columnstore). - By default, numeric fields containing
NaN/+Inf/-Infvalues are not correctly replicated, and will be converted toNULL. A workaround is available, but is not enabled by default.
Where can I find logs for processes running during live migration?
Live migration involves several background processes to manage different stages of the migration. The logs of these processes can be helpful for troubleshooting unexpected behavior. You can find these logs in the<volume_mount>/logs directory.
Source and target databases have different TimescaleDB versions
When you migrate a self-hosted or () database to , the source database and the destination must run the same version of . Before you start live migration:-
Check the version of running on the source database and the
target :
-
If the version of on the source database is lower than your ,
either:
-
Downgrade: reinstall an older version of on your that
matches the source database:
-
Connect to your and check the versions of available:
-
If an available release matches your source database:
-
Uninstall from your :
-
Reinstall the correct version of :
You may need to reconnect to your usingpsql -Xwhen you’re creating the extension. -
Uninstall from your :
-
Connect to your and check the versions of available:
- Upgrade: for self-hosted databases, upgrade to match your .
-
Downgrade: reinstall an older version of on your that
matches the source database:
Why does live migration log “no tuple identifier” warning?
Live migration logs a warningWARNING: no tuple identifier for UPDATE in table
when it cannot determine which specific rows should be updated after receiving an
UPDATE statement from the source database during replication. This occurs when tables
in the source database that receive UPDATE statements lack either a PRIMARY KEY or
a REPLICA IDENTITY setting. For live migration to successfully replicate UPDATE and
DELETE statements, tables must have either a PRIMARY KEY or REPLICA IDENTITY set
as a prerequisite.
Set REPLICA IDENTITY on Postgres partitioned tables
If your tables use native partitioning, settingREPLICA IDENTITY on the
root (parent) table will not automatically apply it to the partitioned child tables.
You must manually set REPLICA IDENTITY on each partitioned child table.
Can I use read/failover replicas as source database for live migration?
Live migration does not support replication from read or failover replicas. You must provide a connection string that points directly to your source database for live migration.Can I use live migration with a Postgres connection pooler like PgBouncer?
Live migration does not support connection poolers. You must provide a connection string that points directly to your source and target databases for live migration to work smoothly.Can I use Tiger Cloud instance as source for live migration?
No, cannot be used as a source database for live migration.How can I exclude a schema/table from being replicated in live migration?
At present, live migration does not allow for excluding schemas or tables from replication, but this feature is expected to be added in future releases. However, a workaround is available for skipping table data using the--skip-table-data flag.
For more information, please refer to the help text under the migrate subcommand.
Large migrations blocked
automatically manages the underlying disk volume. Due to platform limitations, it is only possible to resize the disk once every six hours. Depending on the rate at which you’re able to copy data, you may be affected by this restriction. Affected instances are unable to accept new data and error with:FATAL: terminating connection due to administrator command.
If you intend on migrating more than 400 GB of data to , open a
support request requesting the required storage to be pre-allocated in your
. You can open a support request directly from Tiger Console,
or by email to support@tigerdata.com.
Import from a database with downtime
Dumping and locks
Whenpg_dump starts, it takes an ACCESS SHARE lock on all tables which it
dumps. This ensures that tables aren’t dropped before pg_dump is able to drop
them. A side effect of this is that any query which tries to take an
ACCESS EXCLUSIVE lock on a table is be blocked by the ACCESS SHARE lock.
A number of -internal processes require taking ACCESS EXCLUSIVE
locks to ensure consistency of the data. The following is a non-exhaustive list
of potentially affected operations:
- converting a chunk into the columnstore/rowstore and back
- continuous aggregate refresh (before 2.12)
- create hypertable with foreign keys, truncate hypertable
- enable hypercore on a hypertable
- drop chunks
pg_dump command. This may have unintended
consequences for your database performance.
Dumping with concurrency
When using thepg_dump directory format, it is possible to use concurrency to
use multiple connections to the source database to dump data. This speeds up
the dump process. Due to the fact that there are multiple connections, it is
possible for pg_dump to end up in a deadlock situation. When it detects a
deadlock it aborts the dump.
In principle, any query which takes an ACCESS EXCLUSIVE lock on a table
causes such a deadlock. As mentioned above, some common operations which take
an ACCESS EXCLUSIVE lock are:
- retention policies
- columnstore compression policies
- continuous aggregate refresh policies
pg_dump, and turn them on once the dump
is complete. If the dump procedure takes longer than the continuous aggregate
refresh policy’s window, you must manually refresh the continuous aggregate in
the correct time range. For more information, consult the
refresh policies documentation.
To turn off the jobs:
Restoring with concurrency
If the directory format is used forpg_dump and pg_restore, concurrency can be
employed to speed up the process. Unfortunately, loading the tables in the
timescaledb_catalog schema concurrently causes errors. Furthermore, the
tsdbadmin user does not have sufficient privileges to turn off triggers in
this schema. To get around this limitation, load this schema serially, and then
load the rest of the database concurrently.
Ownership of background jobs
The
_timescaledb_config schema is an internal schema not part of the public API. For normal job
management, use the timescaledb_information.jobs informational view and job
management functions. Direct modification of internal tables should only be done in migration
scenarios as described below._timescaledb_config.bgw_jobs table is used to manage background jobs.
This includes custom jobs, columnstore compression policies, retention
policies, and continuous aggregate refresh policies. On , this table
has a trigger which ensures that no database user can create or modify jobs
owned by another database user. This trigger can provide an obstacle for migrations.
If the --no-owner flag is used with pg_dump and pg_restore, all
objects in the target database are owned by the user that ran
pg_restore, likely tsdbadmin.
If all the background jobs in the source database were owned by a user of the
same name as the user running the restore (again likely tsdbadmin), then
loading the _timescaledb_config.bgw_jobs table should work.
If the background jobs in the source were owned by the postgres user, they
are be automatically changed to be owned by the tsdbadmin user. In this case,
one just needs to verify that the jobs do not make use of privileges that the
tsdbadmin user does not possess.
If background jobs are owned by one or more users other than the user
employed in restoring, then there could be issues. To work around this
issue, do not dump this table with pg_dump. Provide either
--exclude-table-data='_timescaledb_config.bgw_job' or
--exclude-table='_timescaledb_config.bgw_job' to pg_dump to skip
this table. Then, use psql and the COPY command to dump and
restore this table with modified values for the owner column.
Common issues
Extension availability
There are a vast number of extensions available in the wild. supports many of the most popular extensions, but not all extensions. Before migrating, check that the extensions you are using are supported on . Consult the list of supported extensions.TimescaleDB extension in the public schema
When self-hosting, the extension may be installed in an arbitrary schema. only supports installing the extension in thepublic schema. How to go about resolving this depends heavily on the
particular details of the source schema and the migration approach chosen.
Tablespaces
does not support using custom tablespaces. Providing the--no-tablespaces flag to pg_dump and pg_restore when
dumping/restoring the schema results in all objects being in the
default tablespace as desired.
Only one database per instance
While clusters can contain many databases, s are limited to a single database. When migrating a cluster with multiple databases to , one can either migrate each source database to a separate or “merge” source databases to target schemas.Superuser privileges
Thetsdbadmin database user is the most powerful available on , but it
is not a true superuser. Review your application for use of superuser privileged
operations and mitigate before migrating.