Psql a Emacs

Z GeoWikiCZ
Verze z 18. 3. 2007, 18:09, kterou vytvořil Pytel (diskuse | příspěvky) (Zacatek editace odstavce o Emacsu a SQL pro pokrocile)

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=>

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ů.

Emacs

Emacs - Rychlý přehled

  1. M-x sql-postgres
  2. Server:
  3. 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 ocdl 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:

  1. 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ý)
  2. 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.
  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)

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

Podívejte se také na