2023-07-21
psql -h localhost -d johto -U silver
Prompt: Password for user silver:
(Enter your password and press enter)
\l
Prompt:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
johto | myuser | UTF8 | C.UTF-8 | C.UTF-8 |
hoenn | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
\dt
Prompt:
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------
public | user | table | silver
(1 row)
CREATE USER silver WITH PASSWORD 'totodileRulez';
Prompt: CREATE ROLE
GRANT ALL PRIVILEGES ON DATABASE johto TO silver;
Prompt: GRANT
CREATE ROLE trainer WITH LOGIN PASSWORD 'totodileRulez';
Prompt: CREATE ROLE
CREATE DATABASE johto;
Prompt: CREATE DATABASE
DROP DATABASE johto;
Prompt: DROP DATABASE
SELECT * FROM pokemon;
Prompt:
id | name
----+----------
1 | Teddiursa
2 | Sunkern
(2 rows)
SELECT * FROM pokemon WHERE name = 'Espeon';
Prompt:
id | name
----+----------
1 | Espeon
(1 row)
SELECT * FROM pokemon INNER JOIN moves ON pokemon.id = moves.pokemon_id;
Prompt:
pokemon_id | name | move_id | move
------------+---------+---------+----------
1 | Teddiursa| 1 | Tackle
2 | Sunkern | 2 | Vine Whip
(2 rows)
SELECT MAX(level) FROM pokemon;
Prompt:
max
-----
100
(1 row)
SELECT MIN(level) FROM pokemon;
Prompt:
min
-----
1
(1 row)
SELECT AVG(level) FROM pokemon;
Prompt:
avg
---------------------
50.5000000000000000
(1 row)
SELECT SUM(level) FROM pokemon;
Prompt:
sum
-----
101
(1 row)
SELECT COUNT(*), type FROM pokemon GROUP BY type;
Prompt:
count | type
-------+-------------
2 | Dark
3 | Steel
(2 rows)
SELECT * FROM pokemon ORDER BY level DESC;
Prompt:
id | name | level | type
----+-----------+-----+---------
1 | Unown| 100 | Psychic
3 | Snubbul| 33 | Fairy
2 | Ursaring| 1 | Normal
(3 rows)
SELECT * FROM (SELECT * FROM pokemon ORDER BY level DESC LIMIT 2) AS subquery;
Prompt:
id | name | level | type
----+-----------+-----+---------
1 | Chikorita | 100 | Grass
3 | Cyndaquil | 33 | Fire
(2 rows)
CREATE INDEX idx_pokemon_level ON pokemon(level);
Prompt: CREATE INDEX
CREATE VIEW high_level_pokemon AS SELECT * FROM pokemon WHERE level > 50;
Prompt: CREATE VIEW
SELECT * FROM high_level_pokemon;
Prompt:
id | name | level | type
----+-----------+-----+---------
1 | Totodile | 100 | Water
(1 row)
SELECT DISTINCT type FROM pokemon;
Prompt:
type
-----------
Grass
Fire
(2 rows)
SELECT * FROM pokemon WHERE name LIKE '%quil%';
Prompt:
id | name | level | type
----+-----------+-----+---------
1 | Cyndaquil | 100 | Fire
2 | Quilava | 1 | Fire
(2 rows)
SELECT * FROM moves RIGHT JOIN pokemon ON pokemon.id = moves.pokemon_id;
Prompt:
pokemon_id | name | move_id | move
------------+-------+---------+----------
1 | Chikorita| 1 | Tackle
2 | Bayleef | 2 | Vine Whip
3 | Cyndaquil | NULL | NULL
(3 rows)
SELECT * FROM moves FULL OUTER JOIN pokemon ON pokemon.id = moves.pokemon_id;
Prompt:
pokemon_id | name | move_id | move
------------+-------+---------+----------
1 | Chikorita| 1 | Tackle
2 | Bayleef | 2 | Vine Whip
3 | Cyndaquil | NULL | NULL
(3 rows)
SELECT A.name, B.name FROM pokemon A, pokemon B WHERE A.type = B.type AND A.name != B.name;
name | name
-----------+----------
Chikorita| Bayleef
Bayleef | Chikorita
(2 rows)
CREATE FUNCTION increase_level(integer, integer) RETURNS integer AS $$
BEGIN
RETURN $1 + $2;
END;
$$ LANGUAGE plpgsql;
Prompt: CREATE FUNCTION
SELECT increase_level(1, 2);
Prompt:
increase_level
----------------
3
(1 row)
CREATE PROCEDURE archive_old_pokemon() AS $$
BEGIN
DELETE FROM pokemon WHERE level < 10;
END;
$$ LANGUAGE plpgsql;
Prompt: CREATE PROCEDURE
CALL archive_old_pokemon();
Prompt: CALL
CREATE TRIGGER check_level_before_insert
BEFORE INSERT ON pokemon
FOR EACH ROW
WHEN (NEW.level > 100)
DO
$$
BEGIN
RAISE EXCEPTION 'Level cannot be more than 100';
END;
$$ LANGUAGE plpgsql;
Prompt: CREATE TRIGGER
PostgreSQL returns errors with specific SQLSTATE values. When an error occurs, an exception is thrown with an associated SQLSTATE value.
For example, if you attempt to create a table that already exists:
CREATE TABLE pokemon(id SERIAL PRIMARY KEY, name VARCHAR(100));
You might get an error like:
ERROR: relation "pokemon" already exists
In this case, you would need to either drop the existing table or change the name of the table you are trying to create.