NOTE: Make sure you add bin to the path for you to be able to run the command.
$ sudo service postgress start
$ sudo -u postgres psql
Now you will be in the psql mode
# help -> will show you the help commands
Note: we will represent psql mode by the '#' before the commands and the terminal mode by '$'.
# \l
# CREATE DATABASE <db-name> ;
IMP: Make sure you put the ';' at the end, else the command won't be executed.
Method 1 Directly from terminal
$ psql -h localhost -p 5432 -U postgres <db-name>
-h : for the hostname -p : for port name (default: 5432) -U : username
Method 2 From the psql command line
# \c <db-name>
this will connect you the the db
PLEASE BE CAREFUL WHILE USING THIS COMMAND
DROP DATABASE <db-name> ;
';' is needed
# CREATE TABLE <table-name> (
# <col-name> <data-type> <constraints>,
# .
# .
# .
# );
Example:
test=# CREATE TABLE person (
test(# id BIGSERIAL NOT NULL PRIMARY KEY,
test(# first_name VARCHAR(50) NOT NULL,
test(# last_name VARCHAR(50) NOT NULL,
test(# gender VARCHAR(7) NOT NULL,
test(# dob DATE NOT NULL,
test(# email VARCHAR(150) );
CREATE TABLE
This will create a table to view the tables run the \d command. It will list all the relations
# \d
If you want to see only the tables run
# \dt
To see more about the a table run
# \d <table-name>
| Name | Aliases | Description |
|---|---|---|
| bigint | int8 | signed eight-byte integer |
| bigserial | serial8 | autoincrementing eight-byte integer |
| bit [ (n) ] | fixed-length bit string | |
| bit varying [ (n) ] | varbit [ (n) ] | variable-length bit string |
| boolean | bool | logical Boolean (true/false) |
| box | rectangular box on a plane | |
| bytea | binary data ("byte array") | |
| character [ (n) ] | char [ (n) ] | fixed-length character string |
| character varying [ (n) ] | varchar [ (n) ] | variable-length character string |
| cidr | IPv4 or IPv6 network address | |
| circle | circle on a plane | |
| date | calendar date (year, month, day) | |
| double precision | float8 | double precision floating-point number (8 bytes) |
| inet | IPv4 or IPv6 host address | |
| integer | int, int4 | signed four-byte integer |
| interval [ fields ] [ (p) ] | time span | |
| json | textual JSON data | |
| jsonb | binary JSON data, decomposed | |
| line | infinite line on a plane | |
| lseg | line segment on a plane | |
| macaddr | MAC (Media Access Control) address | |
| money | currency amount | |
| numeric [ (p, s) ] | decimal [ (p, s) ] | exact numeric of selectable precision |
| path | geometric path on a plane | |
| pg_lsn | PostgreSQL Log Sequence Number | |
| point | geometric point on a plane | |
| polygon | closed geometric path on a plane | |
| real | float4 | single precision floating-point number (4 bytes) |
| smallint | int2 | signed two-byte integer |
| smallserial | serial2 | autoincrementing two-byte integer |
| serial | serial4 | autoincrementing four-byte integer |
| text | variable-length character string | |
| time [ (p) ] [ without time zone ] | time of day (no time zone) | |
| time [ (p) ] with time zone | timetz | time of day, including time zone |
| timestamp [ (p) ] [ without time zone ] | date and time (no time zone) | |
| timestamp [ (p) ] with time zone | timestamptz | date and time, including time zone |
| tsquery | text search query | |
| tsvector | text search document | |
| txid_snapshot | user-level transaction ID snapshot | |
| uuid | universally unique identifier | |
| xml | XML data |
Taken from the docs
For more info look at this site
The following are commonly used constraints available in PostgreSQL.
| Keyword | Description |
|---|---|
| NOT NULL | Ensures that a column cannot have NULL value. |
| UNIQUE | Ensures that all values in a column are different. |
| PRIMARY KEY | Uniquely identifies each row/record in a database table. |
| FOREIGN KEY | Constrains data based on columns in other tables. |
| CHECK | Ensures that all values in a column satisfy certain conditions. |
| EXCLUSION | Ensures that if any two rows are compared on the specified column(s) or expression(s) using the specified operator(s), not all of these comparisons will return TRUE. |
PLEASE BE SURE, because dropping a table will lead to permanent loss of all the data
# DROP TABE <table-name>;
We need to specify the table name first then specify the column names, and the specify the values in the same order you specified the column names
INSERT INTO <table-name> (
<col1>,
<col2>,
.
.
.
<colx> )
VALUES (<value1>, <value2>, <value3>, ... <valuex>);
Example:
test=# INSERT INTO person (
first_name,
last_name,
gender,
dob,
email)
VALUES ('Jake', 'Jones', 'MALE', DATE '1990-01-10', '[email protected]');
INSERT 0 1
# \i /absolute/path/to/the/sqlfile
Make sure the commands from the file are valid and ends with ';' semi-colon
# SELECT * FROM <table-name>;
here * means you want to Select all the columns and hence every data will be displayed
# SELECT <col1>, <col2> from <table-name>;
Now only the data of col1 and col2 will be displayed
ODERING THE DATA
using the ORDER BY clause
# SELECT * FROM <table-name> ORDER BY <col1>;
By default they are in ascending order
Also we can specify
# SELECT * FROM <table-name> ORDER BY <col1>, <col2> ASC;
for descending order we use
# SELECT * FROM <table-name> ORDER BY <col1>, <col2> DESC;
DISINCT DATA
# SELECT DISTINCT <col1>, <col2> FROM <table-name> ORDER BY <col1>;
FILTERING DATA We can filter the data by adding a WHERE clause
# SELECT * FROM <col1> WHERE <condition>
Thank you.