Příkazy končí středníky.
V psql
, stisknutím klávesy enter bez středníku pokračujete v příkazu na další řádek, místo toho, abyste to provedli, přidá to, co jste napsali, do vyrovnávací paměti dotazu. Všimnete si, že výzva se změní z dbname=>
na dbname->
pro označení, že jste na pokračovací lince.
regress=> DROP TABLE sometable
regress-> \r
Query buffer reset (cleared).
regress=> DROP TABLE sometable;
ERROR: table "sometable" does not exist
regress=>
Všimněte si, že když stisknu enter bez středníku, výzva se změní na regress-#
a není provedena žádná akce. Neexistuje žádná tabulka sometable
, takže pokud by byl příkaz spuštěn, byla by hlášena chyba.
Dále se podívejte na použití \r
na dalším řádku? Tím se vymaže vyrovnávací paměť dotazů. Všimněte si, že výzva se změní zpět na regress=#
když je vyrovnávací paměť vymazána, protože již není uložen žádný částečný příkaz.
Toto ukazuje, jak lze příkazy rozdělit na řádky:
regress=> DROP TABLE
regress-> sometable
regress-> ;
ERROR: table "sometable" does not exist
Matoucí je, že psql
příkazy zpětného lomítka jako \d
jsou ukončeny novým řádkem, nikoli středníkem, takže dělají spustit, když stisknete enter. To je užitečné, když chcete (řekněme) zobrazit definici tabulky při psaní příkazu, ale pro nováčky je to trochu matoucí.
Pokud jde o vaše dodatečné otázky:
-
Pokud je v
psql
příkaz "clear screen". pro Windows jsem to zatím nenašel. Na Linuxu používám pouze control-L, stejně jako jakýkoli jiný program využívající readline. Ve Windows\! cls
bude fungovat. -
DDL v PostgreSQL je transakční. Můžete
BEGIN
transakci, vydat nějaké DDL aCOMMIT
aby transakce vstoupila v platnost. Pokud neprovedete svůj DDL v explicitní transakci, vstoupí v platnost okamžitě.