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

První přihlášení do PostgreSQL v Ubuntu

Pokud se po instalaci PostgreSQL pokusíte přihlásit pomocí psql, dostanete pravděpodobně chybu Peer authentication failed for user „postgres“

psql -U postgres
psql: FATAL:  Peer authentication failed for user "postgres"

Oprava: Zkoušel jsem instalaci PostgreSQL verze 10 na Linux Mint a bylo možné se přihlási uživatelem postgres tímto způsobem:
sudo su – postgres (přepnutí na uživatel postgres)
psql -U postgres

V Ubuntu je ve výchozím nastavení vypnuto přihlašování pro uživatele postgres. Do psql se můžeme připojit pomocí příkazu sudo

sudo -u postgres psql postgres

Vytvoříme nového uživatele (roli) s heslem password a schopností vytvářet databáze.

Číst dálPrvní přihlášení do PostgreSQL v Ubuntu

PostgreSQL nemůže po updatu na Windows nastartovat

Databáze PostgreSQL, která mi běží lokálně se zničeho nic zastavila. Zkusil jsem ji tedy nastartovat. Pro start jsem použil tento příkaz:

pg_ctl -D "C:\Program Files\PostgreSQL\9.4\data" start

PostgreSQL sice nenastartoval, ale výpis mě trochu nasměroval, i když mě překvapilo, že by konfigurační soubor postgresql.conf měl obsahovat chyby. V poslední době jsem v něm nic neměnil.

C:\Program Files\PostgreSQL\9.4\bin>2017-12-16 18:42:03 CET LOG:  invalid value for parameter "lc_monetary": "Czech_Czech Republic.1250"
2017-12-16 18:42:03 CET LOG:  invalid value for parameter "lc_numeric": "Czech_Czech Republic.1250"
2017-12-16 18:42:03 CET LOG:  invalid value for parameter "lc_time": "Czech_Czech Republic.1250"
2017-12-16 18:42:03 CET FATAL:  configuration file "C:/Program Files/PostgreSQL/9.4/data/postgresql.conf" contains errors

Chvíle googlení a odpověď je na světě. Microsoft ve svém updatu změnil locale pro Českou republiku. Zde je řešení problému: dba.stackexchange.com/…/postgresql-9-5-wont-start-after-windows-10-fall-update

Když jsem pak spustil:

pg_ctl -D "C:\Program Files\PostgreSQL\9.4\data" start

databáze fungovala. Bohužel byla spuštěna pouze, když běžel cmd. Po jeho vypnutí byla opět nedostupná. Bylo tedy třeba ve Správci úloh najít process postgresql-x64-9.4 a ten spustit.

Pohled pg_stat_activity

Pohled pg_stat_activity ukazuje jaká je aktuální aktivita na databázovém serveru (jaká jsou aktuální připojení k serveru), na které databázi/databázích tato aktivita probíhá, uživatele (který se připojil), status daného připojení a třeba též sql dotaz, který probíhá (v případě, že status je active), nebo poslední dotaz, který na tomto připojení proběhl (pokud je status jiný než active).

select * from pg_stat_activity;

Některé zajímavé sloupce

datid databázové OID
datname název databáze
usename název připojeného uživatele
backend_start čas, kdy se klient připojil do databáze
query_start čas, kdy byl spuštěn sql dotaz
state_change čas, kdy došlo k poslední změně stavu (state)
waiting true, pokud se čeká na zámek (lock)
state stav připojení
query poslední sql dotaz, který proběhl (pokud je stav active tak probíhá)

Zdroje:

 

Konfigurační soubory v PostgreSQL a jejich umístění

Konfigurační soubory a jejich umístění lze jednoduše získat dotazem do pohledu (view) pg_settings.

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';

Ve Windows můžete dostat tento výsledek

name              settings
config_file       C:/Program Files/PostgreSQL/9.4/data/postgresql.conf"
data_directory    C:/Program Files/PostgreSQL/9.4/data"
external_pid_file
hba_file          C:/Program Files/PostgreSQL/9.4/data/pg_hba.conf"
ident_file        C:/Program Files/PostgreSQL/9.4/data/pg_ident.conf"

Na Linuxovém serveru tato umístění

       name        |                 setting
-------------------+------------------------------------------
 config_file       | /etc/postgresql/9.4/main/postgresql.conf
 data_directory    | /var/lib/postgresql/9.4/main
 external_pid_file | /var/run/postgresql/9.4-main.pid
 hba_file          | /etc/postgresql/9.4/main/pg_hba.conf
 ident_file        | /etc/postgresql/9.4/main/pg_ident.conf

Pro krátký popis jednotlivých souborů slouží sloupec short_desc

SELECT name, short_desc FROM pg_settings WHERE category = 'File Locations';
       name        |                    short_desc
-------------------+--------------------------------------------------
 config_file       | Sets the server's main configuration file.
 data_directory    | Sets the server's data directory.
 external_pid_file | Writes the postmaster PID to the specified file.
 hba_file          | Sets the server's "hba" configuration file.
 ident_file        | Sets the server's "ident" configuration file.

Konfigurační soubor postgresql.conf

Umístění
Umístění tohoto konfiguračního souboru na vašem systému zjistíte dotazem do pohledu (view) pg_settings.

SELECT setting FROM pg_settings WHERE name = 'config_file';

Popis
Soubor postgresql.conf je čten při startu serveru. Některé změny v nastavení v tomto souboru vyžadují reload, nekteré restart serveru. To zda je potřeba reload nebo restart poznáte podle sloupce context. Hodnota user znamená, že stačí reload. Pokud je hodnota postmaster, je třeba pro změny provést restart.
Sloupec unit určuje měrnou jednotku pro sloupce setting (současná hodnoty), boot_val (výchozí hodnoty) a reset_val (nová hodnota). Pokud se hodnoty ve sloupcích setting, boot_val a reset_val liší, je potřeba reload nebo reset.

SELECT name, short_desc, context, unit, setting, boot_val, reset_val 
FROM pg_settings 
WHERE name IN ('max_connections', 'shared_buffers', 'effective_cache_size', 'work_mem', 'maintenance_work_mem');

         name         |                           short_desc                            |  context   | unit | setting | boot_val | reset_val
----------------------+-----------------------------------------------------------------+------------+------+---------+----------+-----------
 effective_cache_size | Sets the planner's assumption about the size of the disk cache. | user       | 8kB  | 524288  | 524288   | 524288
 maintenance_work_mem | Sets the maximum memory to be used for maintenance operations.  | user       | kB   | 65536   | 65536    | 65536
 max_connections      | Sets the maximum number of concurrent connections.              | postmaster |      | 100     | 100      | 100
 shared_buffers       | Sets the number of shared memory buffers used by the server.    | postmaster | 8kB  | 16384   | 1024     | 16384
 work_mem             | Sets the maximum memory to be used for query workspaces.        | user       | kB   | 4096    | 4096     | 4096

Číst dálKonfigurační soubor postgresql.conf

Instalace PostgreSQL a pgAdmin3 na Lubuntu

Instalace PostgreSQL i administrativního grafického rozhraní pro tuto databázi pgAdmin3 je zcela jednoduchá. Nejdříve nainstalujeme databázi PostgreSQL příkazem (v tomto případě instaluji PosgreSQL ve verzi 9.5):

sudo apt-get install postgresql-9.5

Následně nainstalujeme pgAdmin3 příkazem:

sudo apt-get install pgadmin3

Nyní můžeme pgAdmin3 spustit.

pgadmin_spusteni pgadmin_prvni_spusteni

Pro připojení ale budeme potřebovat heslo pro uživatele „postgres“ (tento uživatel je vytvořen při instalaci PostgreSQL). Pokud heslo nevíte, přihlásíme se do psql (konzolová aplikace pro práci s PostgreSQL) uživatelem „postgres“ .

Číst dálInstalace PostgreSQL a pgAdmin3 na Lubuntu