Sử dụng COPY TỪ STDIN trong postgres


14

Tôi mới bắt đầu sử dụng Postgres và tôi đang cố gắng tạo một db mẫu để hiểu các chức năng của nó, nhìn xung quanh, tôi tìm thấy một số tập lệnh trong pgfoundry.org. Tôi hiểu các lệnh, vì trước đây tôi đã sử dụng cả Oracle và MS-SQL, nhưng tất cả các tập lệnh tôi đang chạy lỗi trả về khi chúng đạt đến lệnh "SAO CHÉP". Chính xác hơn, lỗi được ném ở phần tử đầu tiên nên được chèn vào bảng đã cho.

Tôi đã thử chạy các tập lệnh cả dưới dạng truy vấn và dưới dạng pgScripts, nhưng theo cả hai cách tôi đều gặp lỗi ở hàng đầu tiên sau khi SAO CHÉP TỪ.

Tôi đang sử dụng pgAdminIII và tôi đã sử dụng StackBuilder để cài đặt PostgreSQL 9.2.4.1 làm Trình điều khiển DB. Tôi có thể thiếu một số cấu hình cơ bản ngăn tôi chạy lệnh này không, hoặc tôi không hiểu chúng hoạt động như thế nào?

EDIT:
Lỗi là:

ERROR:  syntax error at or near "7"
LINE 5600: 7 4 13 37 2012-03-10 16:41:43.797787 2012-03-10 16:41:43.797...
           ^

********** Error **********

ERROR: syntax error at or near "7"
SQL status: 42601
Char: 140891`

trong đó văn bản là:

COPY action_abilitations (id, group_action_id, partecipation_role_id, group_id, created_at, updated_at) FROM stdin;
7   4   13  37  2012-03-10 16:41:43.797787  2012-03-10 16:41:43.797787`

1
Chào mừng đến với dba.SE. Bạn cần bao gồm các thông báo lỗi (nguyên văn) với một câu hỏi như thế. Nếu ngôn ngữ của bạn không phải là tiếng Anh, bạn có thể đặt lại nó trong phiên của mình trước khi chạy tập lệnh để nhận thông báo lỗi tiếng Anh mặc định: SET lc_messages = CChỉ cần chạy nó trong cửa sổ trình soạn thảo SQL, trong đó "chứa" một phiên.
Erwin Brandstetter

Cảm ơn, tôi đang cố gắng tìm ra cách thay đổi ngôn ngữ của mình, tôi sẽ bao gồm thông báo lỗi ngay khi tôi tìm ra cách để làm điều đó.
Eugenio Laghi

1
Oh, tôi quên dấu ngoặc đơn : SET lc_messages = 'C'.
Erwin Brandstetter

Câu trả lời:


10

pgScript là phần mở rộng tập lệnh cục bộ của pgAdmin, mà bạn có lẽ không muốn nhất ở đây.

pgAdmin là GUI, không phải ứng dụng bảng điều khiển - không có stdinbạn có thể dễ dàng sử dụng. Nếu bạn cần stdintruyền phát nội dung của mình, hãy sử dụng psql, đây là một ứng dụng bảng điều khiển - với lệnh \copymeta của psql .

Nếu bạn có một tệp (mà rõ ràng là bạn làm), chỉ cần sử dụng SQL COPYtừ pgAdmin:

COPY action_abilitations (id, group_action_id, ...)
FROM 'C:\Users\usernexus\Desktop\database05-12-2012.sql';

Các tập tin cần phải được đọc cho postgresngười dùng hệ thống.

Thông tin thêm trong yêu cầu liên quan chặt chẽ này đến danh sách hỗ trợ pgAdmin .


ok, ý bạn là tôi nên chạy tập lệnh với một dòng như : psql postgres -p 5432 -f C:\Users\usernexus\Desktop\database05-12-2012.sql? Ngoài ra, tôi chỉ đang thử mọi thứ cục bộ, tôi chỉ cài đặt pgAdmin trên máy tính xách tay của mình.
Eugenio Laghi

1
@EugenioLaghi: Không chính xác. psql -fsẽ thực thi một tập lệnh SQL. Bạn dường như đối phó với một tập tin dữ liệu . Tôi cập nhật câu trả lời của tôi.
Erwin Brandstetter

CẢM ƠN! Lúc đầu, tôi đã cố gắng thực thi một tập lệnh, nhưng bây giờ ít nhất tôi đã tìm ra cách sao chép dữ liệu từ một tập tin! Tối hôm qua tôi đã quá mệt mỏi để hiểu .. :)
Eugenio Laghi

Làm thế nào để bạn chắc chắn rằng người dùng postgres có thể đọc tệp. Tôi đã làm điều đó xảy ra với tệp txt, ngay cả đối với máy tính để bàn của tôi (nơi đặt tệp), nhưng quyền vẫn bị từ chối.

@Geo: Vui lòng bắt đầu một câu hỏi mới bao gồm phiên bản Postgres, HĐH, nơi tệp nằm, lệnh nguyên văn bạn đã sử dụng và hơn thế nữa nếu có liên quan ...
Erwin Brandstetter
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.