Difference between revisions of "Postgres"
(→Usage) |
|||
Line 1: | Line 1: | ||
==Usage== | ==Usage== | ||
+ | Most commands are found by \? | ||
+ | e.g. | ||
+ | \dt - list tables | ||
+ | \l - list databases | ||
+ | \c - connect to db | ||
Since PostgreSQL 10, psql has \gx which is the exact equivalent of mysql's \G | Since PostgreSQL 10, psql has \gx which is the exact equivalent of mysql's \G | ||
select * from sometable \gx | select * from sometable \gx |
Revision as of 16:40, 15 April 2021
Usage
Most commands are found by \? e.g.
\dt - list tables \l - list databases \c - connect to db
Since PostgreSQL 10, psql has \gx which is the exact equivalent of mysql's \G
select * from sometable \gx
ref:stackex
Backup / Restore DB
backup
This will run the dump as the postgres user via su, and avoids some of the permissions errors that can creep up.
# cd /tmp (just need a writeable directory, aka 777) # su -c 'pg_dump mydb >> mydb_dump_2020.sql' postgres
assuming you have a postgres admin user, with all rights, this will backup the db. If you are remote, you might need something similar to (localhost/ip, ports, etc specified):
pg_dump -U username -h localhost databasename >> sqlfile.sql
ref: https://stackoverflow.com/questions/37984733/postgresql-database-export-to-sql-file
restore
Create the new db:
su - postgres psql create database bbbtest; grant all privileges on database bbbtest to mypguser; ALTER DATABASE bbbtest OWNER TO mypguser;
and postgres permissions are a disaster online for getting info on (unforunately, there is nothing like mysql's mysql -uroot -p -e "grant all on db.* to 'user'@localhost identified by 'pass';"). But what does work is permissions for specific tables need to be enabled for the user, so:
GRANT ALL ON sometableindb TO mypguser; \quit exit
Now, with that file
# su -c 'psql -d newdbname --set ON_ERROR_STOP=on -f ./mydb_dump_2020.sql' postgres
If you get errors, adjust data as needed or remove the ON_ERROR_STOP (some can be ignored, some can not - use discretion). At least in some cases, you can move data without worrying about postgres versions. I executed a pg_dump from 11.# and imported to 9.6 without issue. Devuan Beowulf to Ascii.
TIP: if you don't specify -d, then the data will get uploaded to one of the preexisting DB. Not good.
Another approach:
-- su - postgres -- -- psql -- -- -- create database bbbtest; -- -- -- grant all privileges on database bbbtest to root; -- -- -- \quit -- -- exit -- psql bbbtest < dbmake.sql -- -- select * from A1;
Verify user permissions and upload was correct
su - mypguser psql select * from sometable;
See notes about table permissions above.
Create a user
Note that if you have an existing db, you might want to add ownership to this user, or r/w permissions.