Stáhněte .jar soubor z http://www.squirrelsql.org/#installation (Install jar of SQuirreL 3.9.1 for Windows/Linux/others). Přepněte se do složky a spusťte stažený .jar soubor.
java -jar squirrel-sql-<version>-install.jar
Databáze
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.
SQuirrel SQL klient a MariaDB
SQuirrel SQL je SQL klient, který se dá použít pro připojení k různým databázím. Je to je jednotné GUI pro různé databáze. MariaDB je relační databáze a je to open source verze MySQL. Popularita této databáze rychle roste a využívá se tam, kde původně byla MySQL.
Zdroj: https://db-engines.com/en/ranking_trend [19. 4. 2018]
V tomto příspěvku ukáži, jak nainstalovat SQuirrel SQL a zprovoznit v něm připojení do MariaDB. Instalaci SQuirrel jsem se již věnoval v tomto příspěvku.
Stáhněte si SQuirrel.jar a spusťte jej.
java -jar squirrel-sql-snapshot-20180121_2226-standard.jar
Následuje grafický instalátor. Zde jsou jednotlivé kroky.
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.
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:
- postgresql.org/…/monitoring-stats.html
- question-defense.com/…pg_stat_activity-table-fields-explained
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
Modifikace sysdate v Oracle SQL
Oracle funkce sysdate
vrací aktuální datum a čas databáze. Používá například při zjišťování, zda daný záznam je platný či ne.
SELECT * FROM tabulka WHERE datum < sysdate
Často ale potřebujeme zjistit záznam, který je např. starší než aktuální datum plus/mínus X dní/hodin/minut/… Pokud napíšeme:
SELECT SYSDATE, SYSDATE - 60 FROM dual;
bude výsledek následující:
SYSDATE SYSDATE-60 12.07.17 11:22:36 13.05.17 11:22:36
To je docela nepřehledné, protože ne každý může vědět, že se odečítají dny. Mnohem lepší je:
SELECT SYSDATE, SYSDATE - INTERVAL '60' DAY AS sysdate_minus_60_days FROM dual;
který vrací stejný výsledek, ale je mnohem jasnější, jaká časová hodnota se modifikuje (INTERVAL ’60‘ DAY):
SYSDATE SYSDATE_MINUS_60_DAYS 12.07.17 11:25:00 13.05.17 11:25:00
Je samozřejmě možné přidávat a odebírat nejen dny, ale i jiné časové úseky (second, minute, hour, day, month, year).
SELECT SYSDATE, SYSDATE + INTERVAL '5' MINUTE AS sysdate_plus_5_minutess FROM dual;
Výsledek
SYSDATE SYSDATE_PLUS_5_MINUTES 12.07.17 11:26:34 12.07.17 11:31:34