Làm cách nào để nhập các tệp * .sql hiện có trong PostgreSQL 8.4?


105

Tôi đang sử dụng PostgreSQL 8.4 và tôi có một số tệp * .sql để nhập vào cơ sở dữ liệu. Làm thế nào tôi có thể làm như vậy?

Câu trả lời:


142

Từ dòng lệnh:

psql -f 1.sql
psql -f 2.sql

Từ psqllời nhắc:

\i 1.sql
\i 2.sql

Lưu ý rằng bạn có thể cần nhập các tệp theo một thứ tự cụ thể (ví dụ: định nghĩa dữ liệu trước khi thao tác dữ liệu). Nếu bạn có bashshell (GNU / Linux, Mac OS X, Cygwin) và các tệp có thể được nhập theo thứ tự bảng chữ cái , bạn có thể sử dụng lệnh này:

for f in *.sql ; do psql -f $f ; done

Đây là tài liệu của psqlứng dụng (cảm ơn, Frank): http://www.postgresql.org/docs/current/static/app-psql.html


@moon Có thể bạn không có quyền truy cập vào các tệp SQL? Bạn đang sử dụng hệ điều hành nào?
Bolo

@moon Đó là mật khẩu được liên kết với người dùng PostgreSQL của bạn (cặp user-pass được lưu trữ trong PostgreSQL).
Bolo

8
@moon Tôi khuyên bạn nên chia vấn đề của mình thành ba giai đoạn: 1) đảm bảo rằng bạn có thể psqlchạy. 2) đảm bảo người dùng của bạn có ghi ưu đãi cần thiết, chẳng hạn như: CREATE, INSERT, UPDATE, vv 3) nhập khẩu các tập tin SQL. Theo như tôi hiểu, bạn đang ở giai đoạn 1.
Bolo

@Bolo: Bạn có đặt ba giai đoạn vào câu trả lời không?
AH

@Bolo, Như bạn đã đề cập, tôi đang ở bước thứ ba. nhưng làm cách nào để tôi có thể nhập tệp .sql từ máy cục bộ của mình. Tôi đã thử \ i [đường dẫn đầy đủ với phần mở rộng] nhưng tôi nhận được thông báo lỗi .sql không có tệp hoặc thư mục nào như vậy. Bạn có thể vui lòng cho một ví dụ.

75

trong dòng lệnh, đầu tiên hãy truy cập thư mục có psql, sau đó viết các lệnh như sau:

psql [database name] [username]

và sau đó nhấn enter psql yêu cầu mật khẩu cung cấp cho người dùng mật khẩu:

sau đó viết

> \i [full path and file name with extension]

sau đó nhấn enter chèn xong.


Tôi cũng sử dụng cái này. Và nó hoạt động. Nhưng, tôi thay đổi các câu lệnh SQL được cung cấp. Trước đây, * .sql hiện có không sử dụng bất kỳ ký tự nào; như sự kết thúc của một dòng. Và tôi cũng phải loại bỏ GO. Bạn có hink script sql không phải là script psql?
swdev

Tôi đã cố gắng sử dụng \ i [đường dẫn đầy đủ với phần mở rộng] nhưng tôi nhận được thông báo lỗi .sql không có tệp hoặc thư mục như vậy. Bạn có thể vui lòng tải lên một ví dụ. Cảm ơn.

Nếu \ tôi nói không có tệp như vậy thì nó không tìm thấy tệp ở vị trí đó. Tốt nhất là cung cấp URL tuyệt đối. Đối với tôi trên Windows, dòng lệnh này hoạt động: \ i /tmp/robert/test.sql tất nhiên bạn phải có các lệnh SQL hợp lệ trong tệp đó.
shevy

36

Chà, cách ngắn nhất mà tôi biết, là sau:

psql -U {user_name} -d {database_name} -f {file_path} -h {host_name}

database_name: Bạn nên chèn dữ liệu tệp của mình vào cơ sở dữ liệu nào.

file_path: Đường dẫn tuyệt đối đến tệp mà bạn muốn thực hiện nhập.

host_name: Tên của máy chủ. Đối với mục đích phát triển, nó là chủ yếu localhost.

Khi nhập lệnh này trong bảng điều khiển, bạn sẽ được nhắc nhập mật khẩu của mình.


25

Hãy cẩn thận với "/" và "\". Ngay cả trên Windows, lệnh phải ở dạng:

\i c:/1.sql

1

Luôn được ưu tiên sử dụng tệp dịch vụ kết nối (tra cứu / google 'tệp dịch vụ kết nối psql')

Sau đó chỉ cần:

psql service={yourservicename} < {myfile.sql}

Trong trường hợp yourservicenamelà một cái tên phần từ tập tin dịch vụ.

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.