/ Home
Postgres Commands
Note: tbw
How to connect localhost DB?
psql -U postgres -h localhost -p 5432 <db_name>
How to connect to remote DB from command?
psql -U postgres -h <remote_db_end_point> -p 5432 <remote_db_name>
Connect to DB
psql -U postgres
Show databases
\l
show size of the database
\l+
Show roles
\du
switch database
\c db_name
show schema table
\dt+
Get current database:
select current_database();
or
\c
or
SELECT * FROM current_catalog;
List tables in the database
\dt
show table with size
\dt+
show specific schema tables
\dt schema_name.*
specific tble
\d table_name
Get table details from specific schema:
select * from pg_catalog.pg_tables where schemaname != 'flcity' and schemaname != 'pg_catalog';
quit database
\q
Docker:
docker run --name pg11 -e POSTGRES_PASSWORD=kaipulla -d -p 5432:5432 postgres
docker exec -it pg11 bash
psql -h 0.0.0.0 -p 5432 -U postgres
psql -h 127.0.0.1 -p 5432 -U postgres
psql -h 0.0.0.0 -p 5432 -U raja
psql -h 0.0.0.0 -p 5432 -U raja -d rjdbtest
docker exec -it kwikee_postgres_1 psql -U kwikee
psql -h 165.225.36.90 -p 5432 -U postgres
psql -h 120.0.0.1 -p 5432 -U postgres
psql -h localhost -p 5432 -U postgres
172.17.0.3
psql -h 172.17.0.3 -p 5432 -U postgres
psql postgresql://postgres:root@localhost:5432/postgres
# how to install postgres client?
brew install libpq
https://www.compose.com/articles/postgresql-tips-installing-the-postgresql-client/
#
show databases
\l
#
show size of the database
\l+
#
show roles / users
\du
#
Show current user
select current_user();
https://www.dark-hamster.com/database/show-current-user-postgresql/
#
create new user
CREATE USER raja WITH PASSWORD 'kaipulla';
#
psql -U raja -d rjdbtest
https://stackoverflow.com/questions/56146149/how-to-login-to-postgresql-with-different-username-than-postgres-and-how-to-en
#
grant permission
grant all privileges on database rjdbtest to raja;
grant all privileges on database rjdbtest to raja;
# to do
GRANT SELECT ON DATABASE postgres TO raja;
#
switch database
\c db_name
#
list tables in the database
\dt
#
show schema table
\dt+
#
show specific schema tables
\dt schema_name.*
#
specific tble
\d table_name
#
select
*
from
pg_catalog.pg_tables
where
schemaname != 'my_schema_name'
and schemaname != 'pg_catalog';
#
Get current database
SELECT current_database();
or
\c
or
SELECT * FROM current_catalog;
#
Show all user defined functions
\df
#
quit database
\q
# clear screen
\! clear
#
Create DB
CREATE DATABASE rjdbtest;
GRANT CONNECT ON DATABASE rjdbtest TO raja;
CREATE DATABASE rj;
https://www.digitalocean.com/docs/databases/postgresql/how-to/modify-user-privileges/
CREATE TABLE CITY (
ID serial PRIMARY KEY,
NAME VARCHAR (50) UNIQUE NOT NULL,
STATE VARCHAR (50) NOT NULL,
COUNTRY VARCHAR (100) NOT NULL,
CREATED_AT TIMESTAMP NOT NULL
);
INSERT INTO CITY (NAME, STATE, COUNTRY, CREATED_AT) VALUES ('Toronto', 'Ontario', 'Canada', NOW());
INSERT INTO CITY (NAME, STATE, COUNTRY, CREATED_AT) VALUES ('Montreal', 'Quebec', 'Canada', NOW());
DELETE FROM CITY;
DROP TABLE CITY;
CREATE TABLE CITY (
ID serial PRIMARY KEY,
NAME VARCHAR (50) UNIQUE NOT NULL,
STATE VARCHAR (50) NOT NULL,
COUNTRY VARCHAR (100) NOT NULL
);
INSERT INTO CITY (NAME, STATE, COUNTRY) VALUES ('Toronto', 'Ontario', 'Canada');
INSERT INTO CITY (NAME, STATE, COUNTRY) VALUES ('Montreal', 'Quebec', 'Canada');
INSERT INTO CITY (NAME, STATE, COUNTRY) VALUES ('Chennai', 'Tamilnadu', 'India');
INSERT INTO CITY (NAME, STATE, COUNTRY) VALUES ('Madurai', 'Tamilnadu', 'India');
INSERT INTO CITY (NAME, STATE, COUNTRY) VALUES ('Quebec City', 'Quebec', 'Canada');
INSERT INTO CITY (ID, NAME, STATE, COUNTRY) VALUES (90, 'Chidambaram', 'Tamilnadau', 'India');
INSERT INTO CITY (ID, NAME, STATE, COUNTRY) VALUES (4, 'Cumbum', 'Tamilnadau', 'India');
CREATE TABLE CITY (
CITYID serial PRIMARY KEY,
CNAME VARCHAR (50) UNIQUE NOT NULL,
STATE VARCHAR (50) NOT NULL
);
INSERT INTO CITY (CNAME, STATE) VALUES ('Toronto', 'Ontario');
INSERT INTO CITY (CNAME, STATE) VALUES ('Montreal', 'Quebec');
INSERT INTO CITY (CNAME, STATE) VALUES ('Chennai', 'Tamilnadu');
INSERT INTO CITY (CNAME, STATE) VALUES ('Madurai', 'Tamilnadu');
INSERT INTO CITY (CNAME, STATE) VALUES ('Waterloo', 'Ontario');
SELECT * FROM CITY;
DELETE FROM CITY;
DROP TABLE CITY;
SELECT * FROM CITY LIMIT 2;
SELECT * FROM CITY LIMIT 2 OFFSET 2;
https://www.postgresqltutorial.com/postgresql-limit/
SELECT * FROM CITY
ORDER BY CITYID DESC
LIMIT 2;
SELECT * FROM CITY WHERE CITYID = 3;
UPDATE CITY SET CNAME = 'Greater Chennai' WHERE CITYID = 3;
UPDATE CITY SET CNAME = 'Greater Chennai', STATE = 'Thamizhnadu' WHERE CITYID = 3;
SELECT * FROM CITY WHERE STATE LIKE '%du%';
SELECT * FROM CITY WHERE STATE LIKE '%n%';
SELECT * FROM CITY WHERE STATE LIKE '%na%';
SELECT * FROM CITY WHERE STATE NOT LIKE '%n%';
DELETE FROM CITY WHERE CITYID = 3;
SELECT count(*) FROM CITY;
SELECT count(CITYID) FROM CITY;
WITH rows AS (
DELETE FROM CITY
WHERE CITYID = 3
RETURNING 1
)
SELECT count(*) FROM rows;
# Delete all contains the letter n and return how many items deleted
WITH rows AS (
DELETE FROM CITY
WHERE STATE LIKE '%n%'
RETURNING 1
)
SELECT count(*) FROM rows;
CRUD:
Create
INSERT
Read
SELET
Update
UPDATE
Delete
DELETE
More commands:
https://stackoverflow.com/questions/769683/show-tables-in-postgresql
if you face pycopg2 issue in alpine:
https://github.com/uroybd/python3-psycopg2-alpine/issues/2
Sample App:
https://github.com/teamkact/flask-rest-city-crud-postgresql/
Flask - AWS RDS - Postgres - CRUD
flask-aws-rds-postgres-crud-sqlite
https://github.com/rajasgs/flask-aws-rds-postgres-crud-sqlite.git
----------------------------------------------------------------------------------------------------
#
TORONNODB and TOURIST:
CREATE DATABASE TORONNODB;
\c toronnodb
DELETE FROM TOURIST;
DROP TABLE TOURIST;
CREATE TABLE TOURIST (
ID serial PRIMARY KEY,
NAME VARCHAR (50) UNIQUE NOT NULL,
AGE INTEGER NOT NULL
);
INSERT INTO TOURIST (NAME, AGE) VALUES ('Kevin', 23);
INSERT INTO TOURIST (NAME, AGE) VALUES ('Jina', 19);
SELECT * FROM TOURIST WHERE age > 18;
PG Function:
create function get_city_count()
returns int
language plpgsql
as
$$
declare
city_count integer;
begin
select count(*)
into city_count
from city;
return city_count;
end;
$$;
select * from get_city_count();
https://www.postgresqltutorial.com/postgresql-create-function/
----------------------------------------------------------------------------------------------------
Json blob:
select
cityid,
jsonb_build_object(
'cxh', jsonb_build_object(
'environment', jsonb_build_object(
'name', 'dev'
),
'city_obj', jsonb_agg(
jsonb_build_object(
'city_name', cname,
'location_state', state,
'city_id', cityid
)
)
)
) as city_payload
from city
group by cityid
order by cityid
;
----------------------------------------------------------------------------------------------------
https://github.com/kactlabs/flask-migrate-postgres/tree/master
python manage.py db init
python manage.py db stamp head
python manage.py db migrate -m "City Table added"
python manage.py db migrate
python manage.py db upgrade
Sample logs:
python manage.py db stamp head
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
INFO [alembic.runtime.migration] Running stamp_revision -> 7046c3e54d66
(py38) ~/d/kaipulla_space/flask-migrate-postgres master ± python manage.py db migrate -m "City Table added"
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
INFO [alembic.autogenerate.compare] Detected added table 'city'
INFO [alembic.autogenerate.compare] Detected added table 'my_user'
Generating /Users/rajacsp/d/kaipulla_space/flask-migrate-postgres/migrations/versions/2ff3b030eed_city_table_added.py ... done
(py38) ~/d/kaipulla_space/flask-migrate-postgres master ± python manage.py db upgrade
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
INFO [alembic.runtime.migration] Running upgrade 7046c3e54d66 -> 2ff3b030eed, City Table added
----------------------------------------------------------------------------------------------------
# pg function
#
create function get_city_count()
returns int
language plpgsql
as
$$
declare
city_count integer;
begin
select count(*)
into city_count
from city;
return city_count;
end;
$$;
It should retrun "CREATE FUNCTION"
select * from get_city_count();
#
create function get_city()
returns int
language plpgsql
as
$$
declare
city_count integer;
begin
select count(*)
into city_count
from city;
return city_count;
end;
$$;
#
CREATE OR REPLACE FUNCTION get_city_2(c_city varchar(50))
returns table (abc varchar(50), xyz varchar(50))
AS
$$
BEGIN
Return query
SELECT
cname as abc,
state AS xyz
from city
where cname = c_city
;
END;
$$
LANGUAGE plpgsql;
select * from get_city_2('hello'); -- it should return empty
select * from get_city_2('Montreal');
DROP FUNCTION get_city_2(varchar(50));
#
CREATE OR REPLACE FUNCTION get_city_3(c_city varchar(50))
returns table (name varchar(50), c_state varchar(50))
AS
$$
BEGIN
Return query
SELECT
cname as name,
state AS c_state
from city
where cname like c_city
;
END;
$$
LANGUAGE plpgsql;
select * from get_city_3('%on%');
DROP FUNCTION get_city_3(varchar(50));
----------------------------------------------------------------------------------------------------
CREATE TABLE orders (
id serial NOT NULL PRIMARY KEY,
info json NOT NULL
);
INSERT INTO orders (info)
VALUES('{ "customer": "John Doe", "items": {"product": "Beer","qty": 6}}');
select * from orders;
delete * from orders;
drop table orders;
----------------------------------------------------------------------------------------------------
CREATE TABLE product (
id serial NOT NULL PRIMARY KEY,
info json
);
INSERT INTO product (info)
VALUES('{ "customer": "John Doe", "items": {"product": "Beer","qty": 6}}');
INSERT INTO product (info)
VALUES('Some content');
select * from product;
delete * from product;
drop table product;
-- to get the columns
SELECT column_name FROM information_schema.columns WHERE table_name ='product';
----------------------------------------------------------------------------------------------------
CREATE TABLE WEBENTRY (
ID serial NOT NULL PRIMARY KEY,
URL VARCHAR(500),
SCHEDULE_ID INT,
JOB_ID INT
);
INSERT INTO WEBENTRY (URL, SCHEDULE_ID, JOB_ID) VALUES('Url1', 2001, 3001);
INSERT INTO WEBENTRY (URL, SCHEDULE_ID, JOB_ID) VALUES('Url1', 2002, 3002);
INSERT INTO WEBENTRY (URL, SCHEDULE_ID, JOB_ID) VALUES('Url1', 2003, 3003);
INSERT INTO WEBENTRY (URL, SCHEDULE_ID, JOB_ID) VALUES('Url1', 2004, 3004);
INSERT INTO WEBENTRY (URL, SCHEDULE_ID, JOB_ID) VALUES('Url1', 2005, 3005);
SELECT * FROM WEBENTRY;
UPDATE WEBENTRY SET JOB_ID = 4002 WHERE SCHEDULE_ID = 2002;
----------------------------------------------------------------------------------------------------
Extensions:
#
Show extensions
\dx
or
SELECT *
FROM pg_extension;
https://stackoverflow.com/questions/21799956/using-psql-how-do-i-list-extensions-installed-in-a-database
select * from pg_available_extensions;
https://blog.dbi-services.com/listing-the-extensions-available-in-postgresql/
#
CREATE EXTENSION cube
CREATE EXTENSION earthdistance
# Get into extension folder
docker exec -it pg11 bash
cd /usr/share/postgresql/14/extension
https://www.educba.com/postgresql-extensions/
------------------------------------------------------------------------------------
Install Git:
https://linoxide.com/how-to-install-git-on-debian/
https://git.postgresql.org/gitweb/?p=postgresql.git;a=summary
https://git.postgresql.org/gitweb/?a=project_list&s=postgresql&btnS=Search
------------------------------------------------------------------------------------
plpython3:
https://wiki.postgresql.org/wiki/WIP:plpython3
https://github.com/aureliengervasi/postgresql-plpython3/blob/master/Dockerfile
------------------------------------------------------------------------------------
Anonymous table:
select * from (values (1, 'Hello world'), (100, 'Another row')) as foo (mycol1, mycol2);
------------------------------------------------------------------------------------
Column to multiple rows:
SELECT s.token
FROM
(values (1, 'One, Two'), (100, 'Another row')) as t (mycol1, mycol2), unnest(string_to_array(t.mycol2, ' ')) s(token)
SELECT s.token
FROM
unnest(string_to_array('One, Two', ' ')) s(token)
----------------------------------------------------------------------------------------------------