When restoring my postgresql dump to the new hosting, got error that saying plpgsql language already exists. This probably because my hosting already setup plpgsql in all databases by default while dump consist a line to create the language extension. Googling around, I found out that pg_restore provide what they call list file that list out what kind of object should be restored. So the first step is to generate the list file out of your database dump:-
pg_restore -l db.dump > db.listdb.dump is your database dump file and when specifying -l option, the output would be list of object to restore. We save that list in db.list file. Now we can open up db.list with any text editor and comment out the line that mention the creation of plpgsql. The list file should look something like:-
3178; 1262 1525521 DATABASE - cc_live myname 6; 2615 1313721 SCHEMA - audit myname 7; 2615 1313722 SCHEMA - cct myname 3; 2615 2200 SCHEMA - public postgres 3179; 0 0 COMMENT - SCHEMA public postgres 3180; 0 0 ACL - public postgres ;1007; 2612 1313725 PROCEDURAL LANGUAGE - plpgsql myname 639; 1247 1313728 TYPE cct daily_sale myname 641; 1247 1313729 DOMAIN public bigint_unsigned mynameSo we comment out (by putting semicolon at the beginning of the line) plpgsql object. Then we restoring the dump, we specify the list file to pg_restore:-
pg_restore -x -O -L db.list db.dump | psql new_dbThis is useful if the dump file very large or using the archive format which mean you can't edit it directly with editor. The list file supposed to be editable.