1
0
Fork 0
knowledge-base/KB/Linux/Server/PostgreSQL.md

2.6 KiB

creation date tags
2022-01-08
note
linux
postgres
database
postgresql
psql
archlinux

PostgreSQL

Commonly used

-- list all users
\du

-- list all databases
\l

-- list all (public.) tables in a db
\dt+

-- create db
CREATE DATABASE yourdbname;

-- new user/new db
CREATE USER youruser WITH ENCRYPTED PASSWORD 'yourpass';
GRANT ALL PRIVILEGES ON DATABASE yourdbname TO youruser;

-- existing db
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO youruser;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO youruser;
REASSIGN OWNED BY olduser TO newuser;

-- change owner
ALTER DATABASE name OWNER TO youruser;

-- revoke from old user
revoke all privileges on database db from "olduser";

-- rename db
ALTER DATABASE db RENAME TO newdb;

-- drop all owned
DROP OWNED BY <user>

-- revoke and drop
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM <user>;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM <user>;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM <user>;
DROP USER <user>;

Updating major versions

systemctl start postgresql.service // if not already running
chown postgres:postgres /var/lib/postgres
sudo -i -u postgres
pg_dumpall >> old_backup.sql
exit
systemctl stop postgresql.service
mv /var/lib/postgres/data /var/lib/postgres/olddata
pacman -Syyu
mkdir /var/lib/postgres/data
chown postgres:postgres /var/lib/postgres/data
sudo -i -u postgres
initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'
exit
systemctl daemon-reload
systemctl start postgresql.service
sudo -i -u postgres
psql -f old_backup.sql postgres // if postgis is used, the lib has to be accessible before importing
exit

Updating major versions in docker(-compose)

  • Backup existing instance:

    // host
    docker-compose down
    cp -r <data-dir> <data-dir-bak>
    docker-compose up -d
    docker exec -it <container-name> /bin/bash
    
    // container
    pg_dumpall >> /old_backup.sql
    exit
    
    // host
    docker cp <container-name>:/old_backup.sql .
    docker-compose down
    rm -rf <data-dir>
    
  • Change major version tag of container, e.g. edit docker-compose

  • Restore old database dump

    // host
    docker-compose up -d
    docker cp old_backup.sql <container-name>:/old_backup.sql
    docker exec -it <container-name> /bin/bash
    
    // container (leave out -U if chowned in container user is the correct one)
    psql -U <user-access-to-postgres, e.g. postgres> -f old_backup.sql
    rm /old_backup.sql
    exit
    
    // host
    docker-compose down
    docker-compose up -d
    
  • Verify applications and delete <data-dir-bak> and the dumped .sql file