After upgrading to a paid plan, I still have a free database but the previously free app instance is now being charged. Was this due to a mistake on my part or is this deliberate?

We understand how this seems like the ‘wrong’ type of upgrade. However, we do not presume to know when/how to upgrade databases to the production level paid tier.

We do not migrate databases because customers usually want more control over the process.
Also it is reasonable for customers to use free tier databases with their standard tier applications. Customers often do this if they are running review applications or for their demo application. Generally staging/production environments will use the paid tier databases so that they are as similar as possible.

We usually recommend using pg_dump and psql to migrate the data:

pg_dump -Fp –no-acl –no-owner –clean

postgresql://{REDACTED}@postgres-free-tier-v2020.gigalixir.com:5432/{DBNAME} > backup.sql

psql postgres://{REDACTED}@{STANDARD TIER IP ADDRESS}:5432/{DBNAME} < backup.sql