2012-12-29 26 views
22

Tôi đang sử dụng PGAdmin 1.14.3.Quyền bị từ chối khi cố nhập tệp CSV từ PGAdmin

Khi tôi cố gắng thực hiện một lệnh nhập khẩu:

COPY grad(country_code, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2, admin_name3, admin_code3, latitude, longitude, accuracy) 
FROM 'C:\\Users\\denis\\Desktop\\BP2Project\\USA\\US.txt'; 

tôi nhận được một

ERROR: could not open file "C:\Users\denis\Desktop\BP2Project\USA\US.txt" for reading: Permission denied SQL state: 42501

tôi đã nhìn lên similar câu hỏi khác và không ai trong số họ giải quyết vấn đề của tôi.

Tôi đã đăng nhập với tư cách người dùng "postgres" là superuser. Tôi không hiểu tại sao tôi lại thiếu quyền. Tôi đang sử dụng Windows 7.

Trả lời

7

Người dùng Postgres phải có quyền truy cập đọc trên tệp mà bạn sắp sao chép.

Nhìn vào this article để xem cách sửa đổi quyền truy cập bảo mật của tệp trên Windows.

+0

Làm cách nào để tôi đặt quyền cho postgres? – Tool

+2

@Tool: * người dùng hệ thống * "postgres" cần quyền trong hệ thống tệp. Không gây nhầm lẫn với người dùng * cơ sở dữ liệu * "postgres". Và chúng ta đang nói về một tệp cục bộ cho * server *, đúng không? Nếu không, bạn không thể sử dụng SQL 'COPY' theo cách này. Hãy tìm lệnh [psql meta-command '\ copy'] (http://www.postgresql.org/docs/current/interactive/app-psql.html) trong trường hợp này. –

+0

Tôi đang sử dụng psql từ Cygwin. Không tìm thấy người dùng Postgres hoặc postgres trên hộp Windows của tôi ... – Cromax

0

Responses cho vấn đề này trên chủ đề khác nhau đi một cái gì đó giống như này 1. "Nói cho tôi biết chính xác những gì lệnh bạn sử dụng" 2. "Hãy chắc chắn rằng bạn có quyền đúng" 3. "Chỉ cần sử dụng/sao chép"

Tôi vừa thử cấp quyền cho mọi người trên tệp cvs mà tôi đang cố gắng sao chép, và nó vẫn cho tôi sự cho phép từ chối lỗi. Tôi nghĩ rằng chức năng này bị hỏng và đã bị hỏng cho nhiều bản phát hành liên tiếp qua nhiều phiên bản Windows liên tiếp.

+0

Trong giao diện thứ hai, việc đặt quyền người dùng thành 'Evereyone' có vẻ như có một số hiệu ứng. – Alex

40

Các permissions article đề cập trong answer bởi HouariFlimzy là một tài liệu tham khảo tốt, nhưng một câu trả lời trực tiếp (sửa chữa nhanh chóng tôi đã sử dụng) là:

  • Nhấp chuột phải vào thư mục chứa các tập tin dữ liệu (s) quyền đó đã bị từ chối và sau đó nhấp vào Thuộc tính.
  • Trong cửa sổ Thuộc tính của Thư mục, chọn tab Bảo mật.
  • Nhấp vào nút Chỉnh sửa.
  • Trong cửa sổ "Quyền cho thư mục" đã mở, nhấp vào nút Thêm ....
  • Nhập Everyone vào hộp "Nhập tên đối tượng để chọn" vùng văn bản.
  • Nhấp vào OK và cửa sổ sẽ đóng lại.
  • Xác minh rằng mặc định Đọc & Thực hiện quyền được đặt thành Cho phép qua hộp kiểm chọn trong cửa sổ trước đó.
  • Nhấp vào OK và cửa sổ sẽ đóng lại.
  • Nhấp vào nút Áp dụng trong cửa sổ Thuộc tính thư mục.

Bây giờ bạn có thể chạy câu lệnh SQL COPY cần truy cập các tệp đó.

  • Sau khi hoàn tất, quay lại cửa sổ Thuộc tính của thư mục.
  • Nhấp vào nút Chỉnh sửa.
  • Chọn mục nhập Everyone trong trường "Nhóm hoặc tên người dùng:".
  • Nhấp vào nút Xóa.
  • Nhấp vào OK trên các cửa sổ đang mở còn lại.

Quyền bây giờ đã được trả lại cho chúng.

+0

** Lưu ý: ** Tôi đã làm theo các bước sau cho Windows 2008 R2. – Kevin

+1

Đây phải là câu trả lời được chấp nhận và đừng quên đánh dấu vào ô "Viết" nếu bạn sẽ sao chép dữ liệu ra khỏi PG. – JLB

2

Nếu bạn không muốn cấp quyền cho Mọi người, bạn có thể thêm quyền vào tài khoản đã bắt đầu dịch vụ. Trong Bảng điều khiển - Công cụ quản trị - Dịch vụ, sao chép tên tài khoản trong tab 'Đăng nhập'. (Trên hệ thống của tôi, tài khoản này được gọi là 'Dịch vụ mạng'.) Sau đó chia sẻ thư mục với tệp CSV với người dùng này như được hiển thị trong câu trả lời ở trên.

5

Ok, đây là cách lệnh COPY hoạt động, để xuất bảng sang CSV, từng bước. Xin lưu ý rằng tôi đang sử dụng pgAdmin 111.

  1. Tạo thư mục đích mà bạn muốn xuất bảng.
  2. Đặt một sự cho phép đọc/ghi trên thư mục này theo các bước dưới đây \ myExports
  3. ::

Right click the folder containing the data file(s) that permission was denied >to and then click Properties.

In the Folder's Properties window, select the Security tab. Click the Edit button.

In the "Permissions for the folder" window that opened, click the Add... button. Type Everyone into the "Enter the object names to select" text area box.

Click OK and the window will close. Verify that the default Read & Execute permissions were set to Allow via the >check checkbox in the previous window. Click OK and the window will close.

Click the Apply button in the Folder Properties window.

  1. Đây là phần khó khăn, thư mục bên trong myExports ví dụ như C tạo ra một tập tin CSV trống với name.Eg mong muốn của bạn employee.csv

  2. Sau đó chạy lệnh copy như thế này:

    copy employee to 'C:\myExports\employee.csv' delimiter ',' csv;

nhân viên là tên bảng trong ví dụ này ..

Hy vọng điều này sẽ hữu ích.

+0

** NOTE ** đối với tôi, khi thay đổi quyền, tôi phải kiểm tra TẤT CẢ các ô ("Toàn quyền kiểm soát", "Sửa đổi" ...) để làm việc này !!! – DrMisha

0

cho tôi và tôi đã dành một số thời gian dài cho việc này. Tôi có một db trung tâm cư trú trên một hộp HP chạy 14.04 postgresql-9.5 pgAdmin3 postgis-2.2, cổ phần được thực hiện thông qua một chia sẻ Samba tweeked. Khách hàng của tôi đang sử dụng hỗn hợp các cửa sổ 10.1, 7, 8.1 và tôi có một máy tính để bàn 14.04 ubuntu.

Tôi đang làm việc với các bảng lớn cập nhật hồ sơ và chuẩn hóa dữ liệu và xây dựng các thủ tục xung quanh các câu lệnh sao chép SQL từ các tệp CSV được tạo từ bản sao COPY public.table_1 TO (thư mục chia sẻ tôi đã thiết lập trong Samba https://www.youtube.com/watch?v=ndAYZ0DJ-U4) '/srv/samba/share/[filename].csv'

Sau đó tôi có thể cập nhật cơ sở dữ liệu khi các bảng đã được sửa đổi với COPY bảng_1 từ '/srv/samba/share/test.csv' SỬ DỤNG DELIMITERS ',' VỚI NULL AS '' HEADER CSV; từ bất kỳ khách hàng nào của tôi.Điều quan trọng như xa như tôi đã có thể xác định được rằng các khách hàng thực hiện việc cập nhật phải là superusers, tất cả mọi thứ cũng phải liên quan đến người dùng vì có 4 máy chủ làm việc cùng nhau tại đây Postgresql, Samba, UNIX và WINS Tất cả người dùng của tôi đều được đăng ký trên mỗi máy chủ có cùng tên người dùng và mật khẩu đồng nhất là yếu tố chính.

Tôi đã thử một thời gian dài di chuyển mọi thứ và thử nhiều quy ước đặt tên khác nhau nhưng cuối cùng nó là http://www.postgresql.org/message-id/[email protected]gov.au đã phân loại tôi giống như một công tắc lớn đang nhấp vào. đường cong học tập nhưng, những giờ tôi đã dành cho điều này sẽ gặt hái phần thưởng xuống dòng ... Yêu thương cuộc sống yêu thương Ubuntu và yêu tinh thần mã nguồn mở nhưng đó có thể là thiếu ngủ đá trong ... IT WORKS

Các vấn đề liên quan