su - pgdba -s /bin/bash -c 'psql voyencedb voyence'
PREPARE voyence_vs_archive_type_compare( text ) AS
SELECT
a.table_name,
a.column_name,
v.voyence_type,
a.archive_type
FROM (
SELECT
table_name,
column_name,
'varchar(' || character_maximum_length || ')' AS archive_type
FROM information_schema.columns
WHERE
table_schema = 'archive' AND
table_name = $1
) AS a
JOIN (
SELECT
table_name,
column_name,
'varchar(' || character_maximum_length || ')' AS voyence_type
FROM information_schema.columns
WHERE
table_schema = 'voyence' AND
table_name = $1
) AS v
ON a.column_name = v.column_name
WHERE voyence_type != archive_type;
EXECUTE voyence_vs_archive_type_compare('{table name}');
Example:voyencedb=# EXECUTE voyence_vs_archive_type_compare('cm_cel_audit_record');
table_name | column_name | voyence_type | archive_type
---------------------+----------------+---------------+--------------
cm_cel_audit_record | description | varchar(1024) | varchar(500)
(1 row)
NOTE:
SELECT atttypmod
FROM pg_attribute
WHERE
attrelid = '{schema_name.table_name}'::regclass AND
attname = '{column name}';
Example (Continuation of previous example using the description column in the voyence version of the cm_cel_audit_record table, assuming Step 2 above style login):voyencedb=# SELECT atttypmod
voyencedb-# FROM pg_attribute
voyencedb-# WHERE
voyencedb-# attrelid = 'voyence.cm_cel_audit_record'::regclass AND
voyencedb-# attname = 'description';
atttypmod
-----------
1028
(1 row)
UPDATE pg_attribute
SET atttypmod = {new size}
WHERE attrelid = '{schema_name.table_name}'::regclass
AND attname = '{column name}';
Example (Continuation of previous step examples using the description column in the archive version of the cm_cel_audit_record table):voyencedb=# SELECT atttypmod
voyencedb-# FROM pg_attribute
voyencedb-# WHERE
voyencedb-# attrelid = 'archive.cm_cel_audit_record'::regclass AND
voyencedb-# attname = 'description';
atttypmod
-----------
500
(1 row)
voyencedb=# UPDATE pg_attribute
voyencedb-# SET atttypmod = 1028
voyencedb-# WHERE attrelid = 'archive.cm_cel_audit_record'::regclass AND
voyencedb-# AND attname = 'description';
UPDATE 1
voyencedb=# SELECT atttypmod
voyencedb-# FROM pg_attribute
voyencedb-# WHERE
voyencedb-# attrelid = 'archive.cm_cel_audit_record'::regclass AND
voyencedb-# attname = 'description';
atttypmod
-----------
1028
(1 row)
SELECT atttypmod FROM pg_attribute WHERE attrelid = 'cm_device'::regclass AND attname = 'vendor_model ;
Example:
voyencedb=# SELECT atttypmod FROM pg_attribute WHERE attrelid = 'cm_device'::regclass AND attname = 'vendor_model';
atttypmod
-----------
104
(1 row)
Update to user preferred length:
UPDATE pg_attribute SET atttypmod = 300+4 WHERE attrelid = 'cm_device'::regclass AND attname = 'vendor_model';