PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dlaczego w psql niektóre polecenia nie działają?

Oświadczenia kończą się średnikami.

W psql , naciśnięcie enter bez średnika kontynuuje instrukcję do następnego wiersza, dodając to, co napisałeś do bufora zapytania, zamiast je wykonywać. Zauważysz, że znak zachęty zmienia się z dbname=> do dbname-> aby wskazać, że jesteś na linii kontynuacji.

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

Zwróć uwagę, że po naciśnięciu klawisza Enter bez średnika monit zmienia się na regress-# i nie podejmuje się żadnych działań. Nie ma tabeli sometable , więc jeśli instrukcja zostanie uruchomiona, zostanie zgłoszony błąd.

Następnie zobacz użycie \r w następnej linii? To czyści bufor zapytań. Zauważ, że monit zmienia się z powrotem na regress=# kiedy bufor jest wyczyszczony, ponieważ nie ma już buforowanej częściowej instrukcji.

To pokazuje, w jaki sposób można podzielić oświadczenia na wiersze:

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

Mylące jest to, że psql polecenia odwróconego ukośnika, takie jak \d są zakończone znakiem nowej linii, a nie średnikiem, więc tak uruchom po naciśnięciu klawisza enter. Jest to przydatne, gdy chcesz (powiedzmy) wyświetlić definicję tabeli podczas pisania oświadczenia, ale jest to trochę mylące dla nowicjuszy.

Jeśli chodzi o dodatkowe pytania:

  1. Jeśli istnieje polecenie „wyczyść ekran” w psql dla Windows jeszcze go nie znalazłem. W Linuksie po prostu używam control-L, tak samo jak każdy inny program używający readline. W systemie Windows \! cls zadziała.

  2. DDL w PostgreSQL jest transakcyjny. Możesz BEGIN transakcji, wydaj trochę DDL i COMMIT transakcji, aby odniosła skutek. Jeśli nie wykonasz swojego DDL w wyraźnej transakcji, natychmiast zacznie ona obowiązywać.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLAlchemy func.count w kolumnie logicznej

  2. Czy kolejność tabel w złączeniu ma znaczenie, gdy używane są złączenia LEWE (zewnętrzne)?

  3. BŁĄD:odmowa zezwolenia dla sekwencji cities_id_seq przy użyciu Postgres

  4. UUID czy SEQUENCE dla klucza podstawowego?

  5. Zdefiniować nazwy tabel i kolumn jako argumenty w funkcji plpgsql?