snippetsqlMinor
how to match pg_repack binary and db version
Viewed 0 times
versionmatchpg_repackbinaryhowand
Problem
I am using this command
when i run "create extension pg_repack" in rds postgres 11, it creates by default with version 1.4.4.
so pg_repack fails due to mismatch in version number between ec2 and db.
Error compiling from source:
```
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer pg_repack.o pgut/pgut.o pgut/pgut-fe.o -L/usr/lib/x86_64-linux-gnu -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -L/usr/lib/llvm-10/lib -L/usr/lib/x86_64-linux-gnu/mit-krb5 -Wl,--as-needed -L/usr/lib/x86_64-linux-gnu -lpq -L/usr/lib/postgresql/11/lib -lpgcommon -lpgport -lpthread -lssl -lcrypto -lz -lrt -lcrypt -ldl -lm -o pg_repack
/usr/bin/ld: cannot find -lpgcommon
/usr/bin/ld: cannot find -lpgport
collect2: error: ld returned 1 exit status
make[1]: *** [/usr/lib/postgresql/11/lib/pgxs/src/makefiles/pgxs.mk:430: pg_repack] Error 1
make[1]: Leaving directory
sudo apt-get install postgresql-11-repack to install pg_repack(default to 1.4.8).postgresql-11-repack is already the newest version (1.4.8-1.pgdg20.04+1).when i run "create extension pg_repack" in rds postgres 11, it creates by default with version 1.4.4.
List of installed extensions
Name | Version | Schema | Description
--------------+---------+------------+--------------------------------------------------------------
pg_repack | 1.4.4 | public | Reorganize tables in PostgreSQL databases with minimal locksso pg_repack fails due to mismatch in version number between ec2 and db.
ERROR: pg_repack failed with error: program 'pg_repack 1.4.8' does not match database library 'pg_repack 1.4.4'- how do i create repack extension with version 1.4.8 in DB?
- if above is not possible, how do i downgrade by pg_repack version on ec2 back to 1.4.4 same as my db.
- AWS does not allow me to add this extension under "shared_preload_libraries" either.
Error compiling from source:
```
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer pg_repack.o pgut/pgut.o pgut/pgut-fe.o -L/usr/lib/x86_64-linux-gnu -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -L/usr/lib/llvm-10/lib -L/usr/lib/x86_64-linux-gnu/mit-krb5 -Wl,--as-needed -L/usr/lib/x86_64-linux-gnu -lpq -L/usr/lib/postgresql/11/lib -lpgcommon -lpgport -lpthread -lssl -lcrypto -lz -lrt -lcrypt -ldl -lm -o pg_repack
/usr/bin/ld: cannot find -lpgcommon
/usr/bin/ld: cannot find -lpgport
collect2: error: ld returned 1 exit status
make[1]: *** [/usr/lib/postgresql/11/lib/pgxs/src/makefiles/pgxs.mk:430: pg_repack] Error 1
make[1]: Leaving directory
Solution
First, check to see if the package version exists for the current distro version:
the type of output will look something like this:
postgresql-11-repack/buster-pgdg 1.4.4-2.pgdg110+1 amd64 [upgradable from: 1.4.3-1.pgdg110+1]
postgresql-11-repack/now 1.4.3-1.pgdg110+1 amd64 [installed,upgradable to: 1.4.4-2.pgdg110+1]
If the package version you need is listed, you can then remove the existing package and install the specific version needed by removing the existing package and installing the targeted version as shown below (here is a good reference on why the debian package for the pg_repack extension version
this is a bit contrived, but in this example I removed
If the package does not show up, you can alternatively build it from source:
One reason you might want to build from source is because the version of the package you need is from a previous version of the OS and you do not want to deal with that type of joy specifically (example)
apt list -a postgresql-11-repackthe type of output will look something like this:
postgresql-11-repack/buster-pgdg 1.4.4-2.pgdg110+1 amd64 [upgradable from: 1.4.3-1.pgdg110+1]
postgresql-11-repack/now 1.4.3-1.pgdg110+1 amd64 [installed,upgradable to: 1.4.4-2.pgdg110+1]
If the package version you need is listed, you can then remove the existing package and install the specific version needed by removing the existing package and installing the targeted version as shown below (here is a good reference on why the debian package for the pg_repack extension version
1.4.4 is numbered 1.4.4-1 or 1.4.4-2 and so on)this is a bit contrived, but in this example I removed
1.4.3 and installed 1.4.4 (the same procedure would apply if you had 1.4.8-1 debian package already installed and you wanted to install 1.4.4-2 specifically):sudo apt-get --purge remove postgresql-11-repack
sudo apt-get install postgresql-11-repack=1.4.4-2If the package does not show up, you can alternatively build it from source:
git clone https://github.com/reorg/pg_repack.git
cd pg_repack/
git checkout tags/ver_1.4.4
make
make installOne reason you might want to build from source is because the version of the package you need is from a previous version of the OS and you do not want to deal with that type of joy specifically (example)
Code Snippets
apt list -a postgresql-11-repacksudo apt-get --purge remove postgresql-11-repack
sudo apt-get install postgresql-11-repack=1.4.4-2git clone https://github.com/reorg/pg_repack.git
cd pg_repack/
git checkout tags/ver_1.4.4
make
make installContext
StackExchange Database Administrators Q#321173, answer score: 6
Revisions (0)
No revisions yet.