sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvorfor har nogle kommandoer ingen effekt i psql?

Udsagn slutter med semikolon.

I psql , ved at trykke på enter uden semikolon fortsætter sætningen til næste linje, og tilføjer det du skrev til forespørgselsbufferen i stedet for at udføre det. Du vil bemærke, at prompten ændres fra dbname=> til dbname-> for at angive, at du er på en fortsættelseslinje.

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

Bemærk, hvordan prompten ændres til regress-#, når jeg har trykket på enter uden semikolon. og der bliver ikke gjort noget. Der er ingen tabel sometable , så hvis sætningen var kørt, ville der blive rapporteret en fejl.

Se derefter brugen af ​​\r på næste linje? Det rydder forespørgselsbufferen. Bemærk, at prompten skifter tilbage til regress=# når bufferen er ryddet, da der ikke er nogen delvis sætning bufferet længere.

Dette viser, hvordan udsagn kan opdeles på tværs af linjer:

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

Det forvirrende er, at psql backslash-kommandoer som \d er newline-terminated, ikke semikolon-terminated, så de gør løb når du trykker enter. Det er praktisk, når du vil (f.eks.) se en tabeldefinition, mens du skriver en erklæring, men det er lidt forvirrende for nybegyndere.

Med hensyn til dine yderligere spørgsmål:

  1. Hvis der er en "ryd skærm"-kommando i psql til Windows har jeg ikke fundet det endnu. På Linux bruger jeg bare kontrol-L, det samme som ethvert andet readline-brugende program. I Windows \! cls vil virke.

  2. DDL i PostgreSQL er transaktionsbestemt. Du kan BEGIN en transaktion, udstede nogle DDL og COMMIT transaktionen for at få den til at træde i kraft. Hvis du ikke foretager din DDL i en eksplicit transaktion, træder den i kraft med det samme.



  1. mysql_fetch_array returnerer kun én række

  2. Sådan forbinder du MySQL-database med PHP-websted

  3. adskil kommaseparerede værdier og gem i tabel i sql server

  4. Oprettelse af en fladtrykt tabel/visning af et hierarkisk defineret datasæt