Užitečné příkazy psql

Připojení k databázi
psql -d databáze -U uživatel (připojí se do postgres databáze pod uživatelem)
psql -U uživatel -h url -p port (připojí se do postgres databáze, která je na url a portu pod uživatelem)

Pokud jste připojeni
\l (zobrazí seznam databází)
\c databáze (přepne se do databáze)
\c databáze uživatel (přepne se do databáze pod uživatelem)
\d (zobrazí seznam všech tabulek a sekvencí v dané databázi)
\dt (zobrazí seznam všech tabulek v dané databázi)
\ds (zobrazí seznam všech sekvencí v dané databázi)
\dn (zobrazí seznam schémat v dané databázi)
\df (zobrazí seznam funkcí v dané databázi)
\dv (zobrazí seznam views v dané databázi)
\du (zobrazí seznam uživatelů v dané databázi)
\d tabulka (zobrazí informace o dané tabulce)
\d sekvence (zobrazí informace o dané sekvenci)
\e (umožní vám zvolit editor pro psaní příkazu)

Nápověda
\? (zobrazí seznam psql příkazů)

Číst dálUžitečné příkazy psql

PostgreSQL v Dockeru

Chcete si vyzkoušet PostgreSQL, ale nechcete si jej instalovat? Řešením je použít Docker. Zde je jednoduchý postup, jak PostgreSQL v Dockeru spustit a připojit se.

docker pull postgres

Stáhne si image postgresu z úložiště (repozitory).

docker image ls

Zobrazí seznam stažených images.

docker ps

Zobrazí seznam aktuálně běžících kontejnerů.

docker run --rm --name my-postgres -e POSTGRES_PASSWORD=password -d -p 2345:5432 postgres

docker run spustí proces v novém kontejneru
-e nastaví proměnnou prostředí (v totmo případě heslo)
-p prováže veřejný port (nastaven na 2345) s portem postgresu (5432) hostPort:containerPort
-d detached mode (spustí kontejner na pozadí a zobrazí id kontejneru)
--rm automaticky odstraní kontejner pokud existuje
--name přiřadí kontejneru jméno

psql -h localhost -p 2345 -U postgres -d postgres

Připojí se k PostgreSQL databázi.

Spojení výsledků více SQL dotazů do jednoho sloupce

SQL umožňuje spojit výsledky více SQL dotazů do jediného sloupce. Nejdříve si vytvoříme tabulky a naplníme je daty.

drop table if exists t_tree;
create table t_tree (id bigint, text text);
insert into t_tree (id, text) values
(1, 'javor'),
(2, 'dub'),
(3, 'borovice');

drop table if exists t_car;
create table t_car (id bigint, text text);
insert into t_car (id, text) values
(1, 'škoda'),
(2, 'nisan'),
(3, 'ford');

drop table if exists t_sport;
create table t_sport (id bigint, text text);
insert into t_sport (id, text) values
(1, 'hokej'),
(2, 'judo'),
(3, 'biatlon');

Spojení výsledků ze tří tabulek:

Číst dálSpojení výsledků více SQL dotazů do jednoho sloupce

Instalace pgAdmin4 na Linux Mint

PgAdmin 4 je populární Open Source administrativní nástroj pro PostgreSQL. Jeho instalace na Linux Mint, má ale určitá úskalí. Pokud používáte Linux Ubuntu, stačí vám apt install. Pro Linux Mint, musíte nejdříve přidat klíč pro balíčky postgresu

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

a do Software Sources přidejte záznam,

Číst dálInstalace pgAdmin4 na Linux Mint

Řazení dat v PostgreSQL podle části řetězce

V tomto příspěvku ukáži, jak získat unikátní emaily ze sloupce databáze PostgreSQL seřazené podle domény. K tomu použijeme funkci substring(co, odkud, kam).

select email from  table_name order by substring(email, position('@' in email), length(email));

Uvedený select zobrazí záznamy ze sloupce email tabulky table_name a seřadí je dle domény (podle části řetězce, který vrátí substring). Pokud chceme unikátní, select změníme následovně:

select email from (select distinct email from table_name) as sub order by substring(email, position('@' in email), length(email));

Chyba relation „hibernate_sequence“ does not exist

Tuto chybu jsem dostal při použití Spring Data se Spring Boot a databází PostgreSQL. Takto vypadala třída definující entity.

@Entity
@Table(name = "t_login")
@SequenceGenerator(name = "t_login_id_seq_gen", sequenceName = "t_login_id_seq", allocationSize = 1)
data class Login(
        @Id
        @GeneratedValue
        var id: Long = 0,

        @Column
        var token: UUID = UUID.randomUUID()
)

Pro id bylo třeba více specifikovat @GeneratedValue:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "t_login_id_seq_gen")

Tím se problém vyřešil.

Změna verze Javy z 8 na 11

Nedávno jsem prováděl změny verze Javy na projektu, který používá Spring Boot. Měnil jsem verzi Javy z verze 8 na verzi 11. Nebylo to až tak strašné, jak jsem čekal (spíše naopak), přesto se ale některé komplikace objevily. V tomto příspěvku budu postupovat od chyby k chybě, tak jak se u mě objevovaly.

Číst dálZměna verze Javy z 8 na 11

Spuštění skriptu ze souboru v psql

Psql je textové rozhraní k databázi PostgreSQL. To umožňuje, kromě mnoha další věcí, i spouštění skriptů ze souboru.

psql -U uzivatel -d databaze -f soubor

Výše uvedený příkaz provede spuštění souboru pod uživatelem uzivatel nad databází databaze.

Pokud máte v souboru zálohu vytvořenou pomocí pg_dump, příkaz je následující.

psql nazev_databaze < soubor_s_daty

Posunutí sekvence v PostgreSQL

Mohou nastat případy, kdy potřebujete posunout sekvenci. V PostgreSQL se k tomu používá příkaz ALTER SEQUENCE. V následujícím příkladu nastaví sekvenci tak, aby začínala od čísla sto.

ALTER SEQUENCE sequence_name START WITH 100;
ALTER SEQUENCE sequence_name RESTART;

Kratší způsob zápisu:

ALTER SEQUENCE sequence_name RESTART WITH 100;

START
Nastaví hodnotu start sekvence. Nemá efekt na současnou hodnotu. Nastaví hodnotu pro budoucí volání ALTER SEQUENCE RESTART.

RESTART
Změní aktuální hodnotu sekvence.


Zdroj: postgresql.org/docs/current/sql-altersequence.html