How to configure postgres to run only one version - linux

I'm pretty new to using postgresql and seemed to have installed two versions that are running at the same time. Both 12 and 14.
Below is the list of commands that I've run, and the results they've yielded.
From WSL-2 Ubuntu 20.04 CLI
➜ which psql
/usr/bin/psql
➜ pg_config --version
PostgreSQL 14.4 (Ubuntu 14.4-1.pgdg20.04+1)
➜ psql --version
psql (PostgreSQL) 14.4 (Ubuntu 14.4-1.pgdg20.04+1)
From psql
=# SHOW server_version;
server_version
------------------------------------
12.11 (Ubuntu 12.11-1.pgdg20.04+1)
(1 row)
=# SELECT version();
version
-------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 12.11 (Ubuntu 12.11-1.pgdg20.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, 64-bit
(1 row)
I've have some persistent issues with my odoo 15 db and think this may be the cause but am unsure.
Any recommendations on how to transition from 12.11 server to 14.4 server and remove 12.11 server would be greatly appreciated.

Thanks to all the above for the help!
Commands I ran to fix on Ubuntu 20.04 / Windows-11 WSL-2:
$ ~ pg_dumpall > export.sql
$ ~ sudo apt-get --purge remove postgresql\*
$ ~ sudo apt-get install postgresql-14 (or -version preferred)
$ ~ sudo -u postgres -i
postgres ~ $ psql
#= CREATE ROLE username superuser
#= ALTER ROLE username WITH LOGIN;
#= \password username;
#= \q
postgres ~ $ exit

Related

psql (PostgreSQL) 9.2.24 / linux - cannot find pg_hba.conf as I need to adjust it

Version: psql (PostgreSQL) 9.2.24 - I also downloaded Version 11.8.
to download v 9 I just ran:
sudo apt-get update
sudo apt-get install python-psycopg2
sudo apt-get install postgresql postgresql-contrib
to get v 11 - I followed this github comment:
https://stackoverflow.com/questions/49573258/installing-postgresql-client-v10-on-aws-amazon-linux-ec2-ami
sudo yum install -y gcc readline-devel zlib-devel
wget https://ftp.postgresql.org/pub/source/v10.4/postgresql-10.4.tar.gz
tar -xf postgresql-10.4.tar.gz
cd postgresql-10.4
./configure
make -C src/bin
sudo make -C src/bin install
make -C src/include
sudo make -C src/include install
make -C src/interfaces
sudo make -C src/interfaces install
make -C doc
sudo make -C doc install
The new package should be installed with all its executables in here: /usr/local/pgsql/bin
Now, keep in mind that commands psql, pg_dump etc. still point to the old version of the psql client. You can run with the full executable paths (/usr/local/pgsql/bin/psql) or prepend the new directory at the beginning of your $PATH so that the system will look it up first:
Edit ~/.bash_profile adding this at the end:
export PATH="/usr/local/pgsql/bin:$PATH"
Then run:
source ~/.bash_profile
Now everything should be ready:
[ec2-user#ip-xx-x-x-xxx ~]$ psql --version
psql (PostgreSQL) 10.4
I am running on EC2 - these are details
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
I am trying to try out Airflow and following these guides:
https://medium.com/#achilleus/robust-apache-airflow-deployment-dd02a6c75c78
https://medium.com/#abraham.pabbathi/airflow-on-aws-ec2-instance-with-ubuntu-aff8d3206171
Having trouble finding pg_hba.conf file
I ran
sudo su
cd /etc
ls
ls returned the below:
image below

2 Postgres Servers on local machine. How to uninstall or disassociate one?

Through some mishap I seem to have 2 separate Postgres servers on my local Ubuntu machine. PGAdmin connects to one (localhost:5432), which can also be reached with the terminal through: sudo -u postgres psql postgres -W -h 127.0.0.1 -p 5432
The other "default" server can be reached through the terminal with just sudo -u postgres psql postgres
For other info, locate bin/psql returns:
/usr/bin/psql
/usr/lib/postgresql/9.5/bin/psql
I suspect the latter of those directories is the Postgres 9.5 instance I really want to use, and the one I want to associate with without needing to specify -h 127.0.0.1 -p 5432. The other can be removed completely. How do I resolve this?
You can use the package manager to remove it.
From terminal, you can list the installed versions of PostgreSQL executing:
$ apt list --installed | grep postgresql
The ones with the format postgresql-X (where "X" is the version) is those to remove. You should be able to do it with the apt purge command.
For example, to remove the version 9.6, you have to execute:
$ sudo apt purge postgresql-9.6
/usr/bin/psql should be a symbolic link to the most recent version installed (/usr/lib/postgresql/9.6/bin/psql).

HINT: No function matches the given name and argument types. `json_build_object`

I have a PostgreSQL database named mypsqldb with a table called mypostgistable. It's on a Linode-hosted Ubuntu 14.04 image. I ran these commands from the terminal.
sudo su - postgres
psql
\c mypsqldb
create extension postgis;
SELECT json_build_object('type','Feature','geometry',ST_AsGeoJSON(geom)::json) FROM mypostgistable;
I got this error: HINT: No function matches the given name and argument types. You might need to add explicit type casts.
But when I run the same query on my desktop computer, which runs Debian 9, I get no error and the query successfully executes.
I have already run sudo apt-get install && sudo apt-get upgrade, as well as sudo apt-get install postgresql postgis* on both my desktop and Linode server.
Here's the outputs for each machine when I run SELECT version();.
Linode/Ubuntu 14.04: PostgreSQL 9.3.22 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4, 64-bit.
Desktop/Debian 9: PostgreSQL 9.6.7 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit
Why does the query fail on the Linode server?
json_build_object first occured in PostgreSQL 9.4.

Which version of PostgreSQL am I running?

I'm in a corporate environment (running Debian Linux) and didn't install it myself. I access the databases using Navicat or phpPgAdmin (if that helps). I also don't have shell access to the server running the database.
Run this query from PostgreSQL:
SELECT version();
I believe this is what you are looking for,
Server version:
pg_config --version
Client version:
psql --version
Using CLI:
Server version:
$ postgres -V # Or --version. Use "locate bin/postgres" if not found.
postgres (PostgreSQL) 9.6.1
$ postgres -V | awk '{print $NF}' # Last column is version.
9.6.1
$ postgres -V | egrep -o '[0-9]{1,}\.[0-9]{1,}' # Major.Minor version
9.6
If having more than one installation of PostgreSQL, or if getting the "postgres: command not found" error:
$ locate bin/postgres | xargs -i xargs -t '{}' -V # xargs is intentionally twice.
/usr/pgsql-9.3/bin/postgres -V
postgres (PostgreSQL) 9.3.5
/usr/pgsql-9.6/bin/postgres -V
postgres (PostgreSQL) 9.6.1
If locate doesn't help, try find:
$ sudo find / -wholename '*/bin/postgres' 2>&- | xargs -i xargs -t '{}' -V # xargs is intentionally twice.
/usr/pgsql-9.6/bin/postgres -V
postgres (PostgreSQL) 9.6.1
Although postmaster can also be used instead of postgres, using postgres is preferable because postmaster is a deprecated alias of postgres.
Client version:
As relevant, login as postgres.
$ psql -V # Or --version
psql (PostgreSQL) 9.6.1
If having more than one installation of PostgreSQL:
$ locate bin/psql | xargs -i xargs -t '{}' -V # xargs is intentionally twice.
/usr/bin/psql -V
psql (PostgreSQL) 9.3.5
/usr/pgsql-9.2/bin/psql -V
psql (PostgreSQL) 9.2.9
/usr/pgsql-9.3/bin/psql -V
psql (PostgreSQL) 9.3.5
Using SQL:
Server version:
=> SELECT version();
version
--------------------------------------------------------------------------------------------------------------
PostgreSQL 9.2.9 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4), 64-bit
=> SHOW server_version;
server_version
----------------
9.2.9
=> SHOW server_version_num;
server_version_num
--------------------
90209
If more curious, try => SHOW all;.
Client version:
For what it's worth, a shell command can be executed within psql to show the client version of the psql executable in the path. Note that the running psql can potentially be different from the one in the path.
=> \! psql -V
psql (PostgreSQL) 9.2.9
If you're using CLI and you're a postgres user, then you can do this:
psql -c "SELECT version();"
Possible output:
version
-------------------------------------------------------------------------------------------------------------------------
PostgreSQL 11.1 (Debian 11.1-3.pgdg80+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 4.9.2-10+deb8u2) 4.9.2, 64-bit
(1 row)
The accepted answer is great, but if you need to interact programmatically with PostgreSQL version maybe it's better to do:
SELECT current_setting('server_version_num'); -- Returns 90603 (9.6.3)
-- Or using SHOW command:
SHOW server_version_num; -- Returns 90603 too
It will return server version as an integer. This is how server version is tested in PostgreSQL source, e.g.:
/*
* This is a C code from pg_dump source.
* It will do something if PostgreSQL remote version (server) is lower than 9.1.0
*/
if (fout->remoteVersion < 90100)
/*
* Do something...
*/
More info here and here.
Execute command
psql -V
Where
V must be in capital.
in shell psql.exe , execute
\! psql -V
Using pgadmin4 it can be seen by double clicking Servers > server_name_here > Properties tab > Version:
Version 3.5:
Version 4.1, 4.5:
A simple way is to check the version by typing psql --version in terminal
In my case
$psql
postgres=# \g
postgres=# SELECT version();
version
---------------------------------------------------------------------------------------------------------------------
PostgreSQL 8.4.21 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.6.real (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit
(1 row)
Hope it will help someone
The pg_config command will report the directory where the PostgreSQL programs are installed (--bindir), the location of C include files (--includedir) and object code libraries (--libdir), and the version of PostgreSQL (--version):
$ pg_config --version
PostgreSQL 9.3.6
use VERSION special variable
$psql -c "\echo :VERSION"
Using command line
Server:
postgres -V
Client:
psql -V
Login to postgres then:
postgres=# select version();
Or from cli:
psql -c "SELECT version();"
Use VERSION special variable
Login as postgres user:
sudo su - postgres
Then:
psql -c "\echo :VERSION"
Check out this guide here for full explaination
If you are already using for tool(used DBeaver) to connect PostgreSQL, it will look like this :
Useful Queries to Chck PostgreSQL Database Version
bash-4.1$ psql
postgres=# SELECT version();
postgres=# SHOW server_version;
To Check PostgreSQL Client Version.
bash-4.1$ psql --version
psql (PostgreSQL) 12.1
Run this query from PostgreSQL:
SELECT version();
If you have shell access to the server (the question mentions op does not have, but in case you have,) on a debian/ubuntu system
sudo apt-cache policy postgresql
which will output the installed version,
postgresql:
Installed: 9.6+184ubuntu1.1
Candidate: 9.6+184ubuntu1.1
Version table:
*** 9.6+184ubuntu1.1 500
500 http://in.archive.ubuntu.com/ubuntu artful-updates/main amd64 Packages
500 http://in.archive.ubuntu.com/ubuntu artful-updates/main i386 Packages
500 http://security.ubuntu.com/ubuntu artful-security/main amd64 Packages
500 http://security.ubuntu.com/ubuntu artful-security/main i386 Packages
100 /var/lib/dpkg/status
9.6+184ubuntu1 500
500 http://in.archive.ubuntu.com/ubuntu artful/main amd64 Packages
500 http://in.archive.ubuntu.com/ubuntu artful/main i386 Packages
where the Installed: <version> is the installed postgres package version.
Don’t know how reliable this is, but you can get two tokens of version fully automatically:
psql --version 2>&1 | tail -1 | awk '{print $3}' | sed 's/\./ /g' | awk '{print $1 "." $2}'
So you can build paths to binaries:
/usr/lib/postgresql/9.2/bin/postgres
Just replace 9.2 with this command.
For the current version of PgAdmin: 4.16 at the time of writing.
Select the DB server whose version you need.
Click on the properties tab in
the right pane.
See screenshot below:
This is quite an old question with many good answers. I found that from version 12 onwards, simply invoking the client tells me what I need to know, but I ran them on the server's shell. Examples below with output.
When I was on version 12:
$ sudo su postgres -c "psql"
psql (12.8 (Ubuntu 12.8-0ubuntu0.20.04.1))
I read this as both the client and the server are at version 12.
After I upgraded Ubuntu from 20.04 to 21.04:
$ sudo su postgres -c "psql"
psql (13.4 (Ubuntu 13.4-0ubuntu0.21.04.1), server 12.8 (Ubuntu 12.8-0ubuntu0.20.04.1))
It's telling me clearly that the client is on version 13 but the server is still on 12, as I confirmed:
$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
12 main 5432 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
Notice, by the way, this misleading result, at this stage:
$ pg_config --version
PostgreSQL 13.4 (Ubuntu 13.4-0ubuntu0.21.04.1)
After I upgraded to version 14:
$ sudo su postgres -c "psql"
psql (14.0 (Ubuntu 14.0-1.pgdg21.04+1))
Type "help" for help.
postgres=#
Again, I interpret it as both the client and the server being on version 14, confirmed once more:
$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
12 main 5432 down,binaries_missing postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
14 main 5433 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
This version is, by the way, the same obtained by running the SELECT version(); query.
If Select version() returns with Memo try using the command this way:
Select version::char(100)
or
Select version::varchar(100)

How to install postgres-9.1 on Ubuntu 10.04 LTS?

Many months ago, I installed postgres 8.4 using the following command:
$ sudo aptitude install postgresql-8.4 postgresql-client postgresql-contrib
Now I am trying to upgrade to 9.1.
$ sudo aptitude install postgresql-9.1
There apparently is no package that matches 9.1 But it does appear to exist for apt-get. Do I have to go with apt-get?
This may help you out:
http://www.postgresql.org/docs/9.1/static/upgrading.html
or else you can follow these steps:
As root:
su - postgres
pg_dumpall > dump.sql
exit
cp ~postgres/dump.sql /root/
Now you can safely remove the postgresql-8.4 and install postgresql-9.1:
aptitude purge postgresql-8.4
aptitude install postgresql-9.1
Next check the postgresql configuration in /etc/postgresql/9.1/main. If you make any changes, make sure to restart postgres with /etc/init.d/postgresql restart.
Postgresql 9.1 is now up and running, let's import our data back into it.
su - postgres
psql < dump.sql
That's all. You're now fully upgraded to PostgreSQL 9.1
edit:
similar question was asked here:
https://askubuntu.com/questions/66194/how-do-i-migrate-my-postgres-data-from-8-4-to-9-1

Resources