Chạy các truy vấn PostgreSQL từ dòng lệnh


278

Tôi đã chèn một dữ liệu vào một bảng .... Bây giờ tôi muốn xem toàn bộ bảng với các hàng và cột và dữ liệu. Làm thế nào tôi có thể hiển thị nó thông qua lệnh?

Câu trả lời:


474

psql -U username -d mydatabase -c 'SELECT * FROM mytable'

Nếu bạn chưa quen với postgresql và không quen sử dụng công cụ dòng lệnh psqlthì có một số hành vi khó hiểu bạn nên biết khi bạn tham gia phiên tương tác.

Ví dụ: bắt đầu một phiên tương tác:

psql -U username mydatabase 
mydatabase=#

Tại thời điểm này, bạn có thể nhập truy vấn trực tiếp nhưng bạn phải nhớ chấm dứt truy vấn bằng dấu chấm phẩy;

Ví dụ:

mydatabase=# SELECT * FROM mytable;

Nếu bạn quên dấu chấm phẩy thì khi bạn nhấn enter, bạn sẽ không nhận được gì trên dòng trả về vì psqlsẽ cho rằng bạn chưa nhập xong truy vấn của mình. Điều này có thể dẫn đến tất cả các loại nhầm lẫn. Ví dụ: nếu bạn nhập lại cùng một truy vấn, rất có thể bạn sẽ tạo ra lỗi cú pháp.

Là một thử nghiệm, hãy thử gõ bất kỳ cắt xén nào bạn muốn tại dấu nhắc psql sau đó nhấn enter. psqlsẽ âm thầm cung cấp cho bạn một dòng mới. Nếu bạn nhập một dấu chấm phẩy trên dòng mới đó và sau đó nhấn enter, thì bạn sẽ nhận được LRI:

mydatabase=# asdfs 
mydatabase=# ;  
ERROR:  syntax error at or near "asdfs"
LINE 1: asdfs
    ^

Nguyên tắc chung là: Nếu bạn không nhận được phản hồi từ psqlnhưng bạn đã mong đợi ít nhất là SOMETHING, thì bạn đã quên dấu chấm phẩy;


4
Vì ít nhất 7.2 (đó là điều mà tôi đã bận tâm kiểm tra, có thể còn sớm hơn), psql đã có tùy chọn --single-line(hoặc -s) khiến mọi lệnh ngay lập tức không cần thêm dấu chấm phẩy.
Gordon

3
Tôi đã dành một giờ để gỡ lỗi và vấn đề là dấu chấm phẩy bị thiếu. CẢM ƠN BẠN
Dawson B

105
SELECT * FROM my_table;

nơi my_tablelà tên của bảng.

BIÊN TẬP:

psql -c "SELECT * FROM my_table"

hoặc chỉ psqlvà sau đó nhập truy vấn của bạn.


7
psql -U username -c your_database "SELECT * FROM my_table"
DrColossos

3
như đã nói, bạn nên kết thúc lệnh của mình bằng dấu chấm phẩy ; nếu bạn đang sử dụng hệ thống windows, hãy xem các phần mềm dành cho người dùng windows về cơ bản, chỉ cần đặt cmd.exe /c chcp 1252sau khi bạn đã mở bảng điều khiển.
D_Guidi

2
đối với người dùng trong tương lai, hãy chắc chắn thêm -d trước tên cơ sở dữ liệu của bạn và -c trước truy vấn: tên người dùng psql -U mydatabase -c 'CHỌN * TỪ mytable'
jmhead

2
đã không làm việc cho tôi. Tôi đã làmpsql: FATAL: database "SELECT * FROM tb_name" does not exist
Jaswinder

Như @DrColossos đã chỉ ra, có vẻ như các trích dẫn kép xung quanh lệnh là cần thiết từ các môi trường cli / batch của Windows.
jewbix.cube

42

Nếu DB của bạn được bảo vệ bằng mật khẩu, thì giải pháp sẽ là:

PGPASSWORD=password  psql -U username -d dbname -c "select * from my_table"

3
Không bao giờ biết có thể cung cấp mật khẩu theo cách này. Nó thực sự tiện dụng khi làm bài kiểm tra. Cảm ơn
zhihong

20

Mở "SQL Shell (psql)" từ Ứng dụng (Mac) của bạn.

nhập mô tả hình ảnh ở đây

Nhấn enter để cài đặt mặc định. Nhập mật khẩu khi được nhắc.

nhập mô tả hình ảnh ở đây

*) Nhập \?để được giúp đỡ

*) Nhập \conninfođể xem người dùng nào bạn được kết nối.

*) Nhập \lđể xem danh sách Cơ sở dữ liệu.

nhập mô tả hình ảnh ở đây

*) \c <Name of DB>Ví dụ, kết nối với cơ sở dữ liệu\c GeneDB1

nhập mô tả hình ảnh ở đây

Bạn sẽ thấy thay đổi lời nhắc chính đối với DB mới, như vậy: nhập mô tả hình ảnh ở đây

*) Bây giờ bạn đang ở trong một DB nhất định, bạn muốn biết Sơ đồ cho DB đó. Lệnh tốt nhất để làm điều này là \dn.

nhập mô tả hình ảnh ở đây

Các lệnh khác cũng hoạt động (nhưng không tốt bằng) select schema_name from information_schema.schemata;select nspname from pg_catalog.pg_namespace;:

nhập mô tả hình ảnh ở đây

-) Bây giờ bạn có các Lược đồ, bạn muốn biết các bảng trong các Lược đồ đó. Đối với điều đó, bạn có thể sử dụng dtlệnh. Ví dụ\dt "GeneSchema1".*

nhập mô tả hình ảnh ở đây

*) Bây giờ bạn có thể thực hiện các truy vấn của bạn. Ví dụ:

nhập mô tả hình ảnh ở đây

*) Đây là DB, Lược đồ và Bảng ở trên trông như thế nào trong pgAdmin:

nhập mô tả hình ảnh ở đây


3
  1. Mở một dấu nhắc lệnh và đi đến thư mục cài đặt Postgres. Trong trường hợp của tôi, đường dẫn Postgres của tôi là "D: \ TOOLS \ Postgresql-9.4.1-3". Sau khi di chuyển đến thư mục bin của Postgres. Dấu nhắc lệnh hiển thị là "D: \ TOOLS \ Postgresql-9.4.1-3 \ bin> "
  2. Bây giờ mục tiêu của tôi là chọn "Tên người dùng" từ bảng người dùng bằng cách sử dụng giá trị "UserId". Vì vậy, truy vấn cơ sở dữ liệu là " Chọn u." Tên người dùng "từ người dùng u Trong đó" UserId "= 1 ".

Truy vấn tương tự được viết như dưới đây cho dấu nhắc lệnh psql của postgres.

D: \ TOOLS \ Postgresql-9.4.1-3 \ bin> psql -U postgres -d DatabaseName -h localhost - t -c "Chọn u. \" Tên người dùng \ "từ người dùng u Trong đó u. \" UserId \ "= 1;


3

Tôi không nghi ngờ gì về câu trả lời @Grant. Nhưng đôi khi tôi gặp một số vấn đề như nếu tên cột giống với bất kỳ từ khóa dành riêng nào của postgresql như tự nhiên trong trường hợp này thì SQL tương tự rất khó chạy từ dòng lệnh vì sẽ cần đến "\ Natural \" trong trường Truy vấn. Vì vậy, cách tiếp cận của tôi là viết SQL trong tệp riêng biệt và chạy tệp SQL từ dòng lệnh. Điều này cũng có một lợi thế khác. Nếu bạn phải thay đổi truy vấn cho một tập lệnh lớn, bạn không cần phải chạm vào tập tin hoặc lệnh tập lệnh. Chỉ thay đổi tệp SQL như thế này

psql -h localhost -d database -U postgres -p 5432 -a -q -f /path/to/the/file.sql

3

Tôi cũng nhận thấy rằng các truy vấn

CHỌN * TỪ tablename;

đưa ra một lỗi trên dấu nhắc lệnh psql và

CHỌN * TỪ "tablename";

chạy tốt, thực sự lạ, vì vậy đừng quên dấu ngoặc kép. Tôi luôn thích cơ sở dữ liệu :-(


-8

Đối với loại câu lệnh cụ thể, bạn có thể thấy phù hợp hơn để sử dụng Azure Data Studio- cho mọi thứ khác đi kèm với dòng lệnh tích hợp. Sử dụng phòng thu, bạn có thể tìm thấy các câu lệnh gõ và đọc đầu ra thoải mái hơn.

Làm theo các bước dưới đây:

  1. Cài đặt Azure Data Studio - là trình chỉnh sửa hiện đại đa nền tảng tập trung vào phát triển dữ liệu; nó là nguồn mở và có thể mở rộng - hai điều mà chính PostgreSQL dựa vào;
  2. Cài đặt tiện ích mở rộng PostgreSQL
  3. Kết nối với máy chủ cục bộ hoặc từ xa của bạn:

    nhập mô tả hình ảnh ở đây

  4. Chỉ tập trung vào viết và thực thi SQL:

    nhập mô tả hình ảnh ở đây

nhiều tính năng hay như lưu kết nối, tạo nhóm máy chủ và thậm chí là thiết bị đầu cuối tích hợp nếu bạn cảm thấy thoải mái hơn khi thực hiện một số tác vụ thông qua psql.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.