I manage a PostgreSQL databases - we currently have clusters on PostgreSQL
v9.6.23 & PostgreSQL v12.8.
Our database clusters are on Linux VMs, with OS:
Flavor: redhat_7
Release: 3.10.0-1160.45.1.el7.x86_64
We have repmgr clusters of 1 Primary & 2 Standby servers & use another server
with PgBouncer to direct the connections to the current Primary.
I am in the process of migrating the v9.6.23 databases to the v12.8 cluster,
which already has live databases on it, so I'm doing a pg_dump on the v9.6
cluster for the individual databases to be migrated & restoring the backups to
the v12.8 cluster. I'm currently testing in a sandbox cluster. The restore
completes successfully.
After the restore, I compare the rowcounts of the dbs from both versions to
verify that the data loaded correctly.
I also do a pg_dump of just the data from both clusters & compare them with the
diff utility. For one of the databases, I'm discovering some differences in
the data. It looks like some data is being truncated:
5,6c5,6
< -- Dumped from database version 9.6.23
< -- Dumped by pg_dump version 9.6.23
---
> -- Dumped from database version 12.8
> -- Dumped by pg_dump version 12.8
34085c34085
< xxxxxxxx xxxxxxxx xxx P 108 xxxxxxx UP FI
xxxx-xx-xx 53809.6016 53809.6016 52W 0 xxx 0
xxxxx \N
---
> xxxxxxxx xxxxxxxx xxx P 108 xxxxxxx UP FI
> xxxx-xx-xx 53809.6 53809.6 52W 0 xxx 0
> xxxxx \N
34088c34088
< xxxxxxxx xxxxxxxx xxx P 108 xxxxxxx UP FI
xxxx-xx-xx 53809.6016 53809.6016 52W 0 xxx 0
xxxxx \N
---
> xxxxxxxx xxxxxxxx xxx P 108 xxxxxxx UP FI
> xxxx-xx-xx 53809.6 53809.6 52W 0 xxx 0
> xxxxx \N
… ß data is truncated in new database
147825,147826c147825,147826
< xxxxxxxx \N \N \N 46716.8008 \N \N \N
\N \N \N \N
< xxxxxxxx \N \N \N 38729.6016 \N \N \N
\N \N \N \N
---
> xxxxxxxx \N \N \N 46716.8 \N \N \N
> \N \N \N \N
> xxxxxxxx \N \N \N 38729.6 \N \N \N
> \N \N \N \N
When I looked at the table specification, it is the same in both versions & the
affected columns are specified as datatype real:
Table "tablex"
Column | Type | Modifiers
------------------+----------------------+-----------
id | integer | not null
column2 | character(8) | not null
column3 | character(3) | not null
column4 | character(1) |
column5 | character(4) |
column6 | character(10) |
column7 | character(2) |
column8 | date |
column9 | real |
column10 | real |
When I do a select on each database version, the results both display the
truncated data:
id | column9 | column10
------------+--------------+------------------
xxxxxxxx | 53809.6 | 53809.6
(1 row)
And when I try to export the data from both versions, the data also exports
with a 1-digit decimal for those columns.
It's only when I do the pg_dump that I can see the extra digits from the
v9.6.23 tables.
In other tables, I'm seeing differences with only 2 digits showing for columns
where the datatype is real - they are being rounded up. For example:
xxxxxxxx 19.8199997 \N \N 3435 \N 1 \N
\N \N 3435 0 0
3435 \N \N \N 0
…
xxxxxxxx 25.8700008 \N \N 4484.12988 80 \N
\N \N \N 2069.6001
0 0 2069.6001 \N \N \N 0
vs.
xxxxxxxx 19.82 \N \N 3435 \N 1 \N \N
\N 3435 0 0 3435
\N \N \N 0
…
xxxxxxxx 25.87 \N \N 4484.13 80 \N \N \N
\N 2069.6 0 0 2069.6 \N \N \N 0
How can I ensure that the data was migrated correctly - that the data hasn't
been truncated or rounded up in the v12.8 tables?
Any help would be greatly appreciated.
Thanks,
Karin Hilbert