Psql a Emacs: Porovnání verzí
m --command |
jak resetovat buffer |
||
Řádek 142: | Řádek 142: | ||
<tt>C-c C-r sql-send-region</tt> | <tt>C-c C-r sql-send-region</tt> | ||
:provede všechny příkazy z daného bloku (sql-send-region) | :provede všechny příkazy z daného bloku (sql-send-region) | ||
Výstupní SQL buffer lze resetovat odesláním příkazu \r. | |||
===== Poznámka ===== | ===== Poznámka ===== |
Verze z 13. 4. 2008, 20:31
Psql
Psql je klientská aplikace pro interaktivní přístup k databázovému systému PostgreSQL.
psql [ volby... ] [ jméno_db [ uživatel ] ]
Za normálních okolností vypisuje psql jako prompt jméno připojené databáze následované řetězcem =>. Například
$ psql testdb Welcome to psql 7.4beta5, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit testdb=>
Psql může načítat příkazy v dávkovém režimu ze standardního vstupu. Příkazy lze zadávavat klientovi psql také z příkazové řádky jako řetězce parametru -c (nebo --command). Například
psql sqlquiz -c "select count(pamatka) from unesco"
Některé administrativní příkazy psql
\cd [adresář]
- Změní běžný pracovní adresář na hodnotu zadaného argumentu. Bez argumentu změní pracovní adresář na uživatelův domovský adresář.
\connect (nebo \c) [jméno_db [uživatel]]
- Zajistí připojení k nové databázi anebo uživatelskému jménu.
\d [pattern]
- Pro každý vzor (pattern) zobrazí všechny odpovídající relace (tabulku, view, indexy, sekvence).
\dn [pattern]
- Zobrazí všechna dostupná schémata (prostory jmen - namespaces). Pokud je uveden vzor (regulární výraz), zobrazí pouze schémata odpovídající uvedenému vzoru (pattern).
\dt [pattern]
- Zobrazí všechny tabulky nebo tabulky odpovídající uvedenému vzoru.
\du [pattern]
- Zobrazí všechny databázové uživatele nebo uživatel odpovídající uvedenému vzoru.
\help (nebo \h) [příkaz]
- Zobrazí syntax uvedeného SQL příkazu. Není-li uveden, zobrazí všechny příkazy pro které je syntaktická nápověda k dispozici.
\i soubor
- Čte vstup ze zadaného souboru, stejně jako by byl zadáván z klávesnice.
\q
- Ukončí program psql.
\r
- Resetuje (vymaže) buffer dotazů.
\?
- Zobrazí nápovědu escape příkazů.
\pset null '(null)'
- Nastaví explicitní zobrazovaní hodnoty null na zadaný řetězec
Emacs
Emacs - Rychlý přehled
- M-x sql-postgres
- Server:
- Database:
... dále stejně/obdobně jako v psql, pouze nefunguje doplňování pomocí klávesy tab (Emacs sql-mode obdobně nabízí i připojení k databázovým systémům db2, informix, oracle, sybase, ingres, interbase a mysql).
Jestliže nyní oteveřeme soubor s příponou sql (resp. je-li dané okno v sql-modu), pak můžeme zapsané sql příkazy posílat ke zpracování klientovi psqml ve druhém okně.
C-c C-c sql-send-paragraph
- spustí příkazy běžného odstavce (odstavce jsou odděleny alespoň jedním prázdnám řádkem)
C-c C-r sql-send-region
- provede všechny příkazy z daného bloku (sql-send-region)
C-c C-b sql-send-buffer
- provede všechny příkazy z celého bufferu
C-c C-h
- nápověda
Emacs - Podrobný popis
Připojení k databázi
Po spuštění emacsu je nutné připojit se k databázi. Příkaz sql-postgres se přípojí k databázi a vytvoří buffer s názvem *SQL* ve kterém se zobrazuje interakce s (na pozadí spuštěným procesem) psql.
M-x sql-postgres
Po spuštění této funkce je uživel vyzván k vyplnění údajů o serveru a názvu databáze. Pro připojení ke cvičné školní databázi osdl se vyplní pouze název databáze. Jestliže se chceme připojit k databázi pod jiným uživatelem než po uživatelem který spustil instanci emacsu (např. pokud jsem přihlášen na serveru jako uživatel pytel, sql-postgres automaticky předpokládá že se budu k databázi hlásit jakou databázový uživatel pytel). Toto lze změnit nastavením parametrů při spuštění procesu psql z emacsu. Do souboru ~/.emacs je nutno dopsat:
(setq sql-postgres-options '("-Uhonza" "-P")) ;; hodlam se prihlasit jakou uzivatel honza s heslem
Nyní bude sql-postgres předpokládat že se hodláme hlásit jako uživatel honza s použitím hesla. Existují další proměnné které nám urychlují připojení k databázi přes sql-postgres:
(setq sql-server "localhost") ;; prihlasuji se nejcasteji k localhostu (setq sql-database "test") ;; pouzivam databazi test
Výše uvedená nastavení se nám defaultně zobrazí při připojování k databázi, tato nastavení můžeme explicitně měnit.
Po spuštění sql-postgres se nám otevře buffer v kterém můžeme pracovat stejně jako v SQL monitoru psql. Klávesou RET
(v Emacsovské terminologii klávesa Enter) odešleme příkaz. Důležité klávesové zkratky:
RET comint-send-input
- odeslání vstupu
C-up, C-c C-p comint-previous-input
- listování v historii směrem dozadu
C-down, C-c c-n comint-next-input
- listování v historii směrem dopředu
Otevření sql souboru
Pro práci s databází postgresql z prostředí systému Emacsu je však lépe komunikovat přes soubor který si po otevření *SQL* bufferu otevřeme. Soubor může mít libovolné jméno a příponu .sql (např. hodina4.sql). Tento soubor můžeme např. průběžně ukládat, procházet obsah souboru a spouštět opakovaně již zadané dotazy. Praktické je zakládání souborů dle jednotlivých cvičení (cviceni1.sql, cviceni2.sql, ...).
Pokud hodláme odesílat dotazy pro databázi přes sql soubor je ideální si otevřít v Emacsu dvě okna. První okno bude obsahovat *SQL* buffer a druhé okno daný sql soubor. Pokud máme v okně pouze *SQL* buffer, je zde několik možností jak otevřít sql soubor:
- Okno rozdělíme na dvě horizontální okna klávesovou zkratkou C-x 2 a v jednom z oken (mezi okny se přechází klávesovou zkratkou C-x o) a následně otevřeme soubor klávesovou zkratkou C-x C-f (pokud soubor neexistuje, je vytvořen nový)
- Pokud hodláme rozdělit okna vertikálně (což se mi zdá velmi výhodné), použijeme stejný postup jako v bodě jedna, pouze pro rozdělení oken použijeme klávesovou zkratku C-x 3.
- Rozdělení okna a otevření souboru provedeme v jednom kroku pomocí klávesové zkratky C-x 4 C-f.
V nově otevřeném souboru můžeme psát SQL příkazy a odesílat je do *SQL* bufferu pomocí klávesových zkratek:
C-c C-c sql-send-paragraph
- spustí příkazy běžného odstavce (odstavce jsou odděleny alespoň jedním prázdnám řádkem)
C-c C-b sql-send-buffer
- provede všechny příkazy z celého bufferu
C-c C-r sql-send-region
- provede všechny příkazy z daného bloku (sql-send-region)
Výstupní SQL buffer lze resetovat odesláním příkazu \r.
Poznámka
- Pokud nejprve otevřete sql soubor a teprve pak se připojíte k databází příkazem sql-postgres, nebudou výše uvedené příkazy fungovat. Musíte proto explicitně pro daný buffer nastavit SQL mód příkazem M-x sql-mode.
Barevné znázornění syntaxe
Barevné znázornění syntaxe pro SQL příkazy otevřeného sql souboru lze provést příkazem font-lock-mode: M-x font-lock-mode. Pokud barevné znázornění syntaxe chceme mít implicitně zapnuté musíme do souboru .emacs zapsat jednu z následujících řádek
(global-font-lock-mode t) ;; chci mit vsechny mody se znazornenou barevnou syntaxi (add-hook 'sql-mode-hook '(lambda () (font-lock-mode 1))) ;; pouze pro sql mod
Některé další užitečné příkazy Emacsu
M-x font-lock-mode
- barevné zvýraznění syntaxe
M-u
- převede následující slovo na velká písmena
M-l
- převede následující slovo na malá písmena
C-x r m
- nastaví bookmark na aktuální pozici otevřeného souboru
C-x r b
- skok na příslušný bookmark (ouško)
C-x r l
- výpis bookmarků
M-x bookmark-save
- uloží bookmarky do souboru (implicitně ~/.emacs.bmk)