sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför har vissa kommandon ingen effekt i psql?

Påståenden slutar med semikolon.

I psql , om du trycker på enter utan semikolon fortsätter satsen till nästa rad och lägger till det du skrev till frågebufferten istället för att köra det. Du kommer att märka att prompten ändras från dbname=> till dbname-> för att indikera att du är på en fortsättningslinje.

regress=> DROP TABLE sometable
regress-> \r
Query buffer reset (cleared).
regress=> DROP TABLE sometable;
ERROR:  table "sometable" does not exist
regress=> 

Lägg märke till hur efter att jag tryckt på enter utan semikolon ändras prompten till regress-# och inga åtgärder vidtas. Det finns ingen tabell sometable , så om satsen hade körts skulle ett fel rapporteras.

Se sedan hur \r används på nästa rad? Det rensar frågebufferten. Observera att prompten ändras tillbaka till regress=# när bufferten rensas, eftersom det inte finns någon partiell sats buffrad längre.

Det här visar hur uttalanden kan delas över rader:

regress=> DROP TABLE
regress-> sometable
regress-> ;
ERROR:  table "sometable" does not exist

Det förvirrande är att psql omvänt snedstreck kommandon som \d är newline-terminated, inte semikolon avslutade, så de gör kör när du trycker på enter. Det är praktiskt när du vill (säg) se en tabelldefinition medan du skriver ett uttalande, men det är lite förvirrande för nykomlingar.

När det gäller dina ytterligare frågor:

  1. Om det finns ett "rensa skärm"-kommando i psql för Windows har jag inte hittat den än. På Linux använder jag bara kontroll-L, samma som alla andra program som använder läsrader. I Windows \! cls kommer att fungera.

  2. DDL i PostgreSQL är transaktionsbaserad. Du kan BEGIN en transaktion, utfärda några DDL och COMMIT transaktionen för att få den att träda i kraft. Om du inte gör din DDL i en explicit transaktion träder den i kraft omedelbart.



  1. Installerar PostgreSQL Extension till alla scheman

  2. Inkludera tabeller och scheman när du listar identitetskolumnerna i en SQL Server-databas

  3. convert_tz returnerar null

  4. PostgreSQL:Varning:Konsolens teckentabell (437) skiljer sig från Windows teckentabell (1252)