2012-05-03 40 views
19

Tôi đang theo dõi RailsCast gần đây để thiết lập PostgreSQL, nhưng tôi không thể chạy lệnh initdb /usr/local/var/postgres. Mỗi khi tôi chạy nó, tôi nhận được lỗi này:Đang cố gắng thiết lập Postgres trong môi trường của tôi nhưng dường như không nhận được quyền truy cập vào intidb

The files belonging to this database system will be owned by user "Construct". 
This user must also own the server process. 

The database cluster will be initialized with locale en_US.UTF-8. 
The default database encoding has accordingly been set to UTF8. 
The default text search configuration will be set to "english". 

creating directory /usr/local/var/postgres ... initdb: could not create directory "/usr/local/var": Permission denied 
+0

Bạn đã giải quyết vấn đề của bạn? – swasheck

+1

Tôi có cùng một sự cố ... chưa tìm thấy giải pháp nào. – fccoelho

Trả lời

45

này nên chỉ làm việc tốt:

# sudo mkdir /usr/local/var/postgres 
# sudo chmod 775 /usr/local/var/postgres 
# sudo chown construct /usr/local/var/postgres 
# initdb /usr/local/var/postgres 

sử dụng tên đăng nhập ở vị trí của cấu trúc . Vì vậy, nếu tên người dùng máy tính của bạn là WDurant, mã sẽ là:

# sudo chown wdurant /usr/local/var/postgres 
+3

'sudo chown $ (whoami)/usr/local/var/postgres /' – jhrr

+1

Rất tiếc khi biết bạn đã gặp phải sự cố như vậy @Geuis. Tôi nên thêm một số bối cảnh để chỉ ra rằng tôi chỉ cố gắng cho thấy rằng 'sudo chown $ (whoami)/usr/local/var/postgres /' chỉ là một cách để lập trình xác định tên người dùng của bạn với '$ (whoami)' thay thế phải gõ nó ra như trong 'sudo chown wdurant/usr/local/var/postgres'. Hy vọng bạn có thể giải quyết mọi thứ, trong mọi trường hợp. Chúc may mắn. – jhrr

+1

Cảm ơn @jhrr. Ugh xin lỗi vì bình luận xấu xí tối qua. Không thực sự hướng đến bạn một cách cá nhân. Chỉ cần rất nhiều thất vọng về kết thúc của tôi cố gắng để có được thiết lập này. Tôi đã xóa nhận xét trước nhưng tôi sẽ để phần này ở đây cho bất kỳ ai khác cần điều này trong tương lai. "Vấn đề không chỉ là chủ sở hữu, các quyền của nó trên thư mục. Không có câu trả lời nào khác đã chỉ ra rằng cần điều chỉnh thư mục perms. Chmod 755 trên thư mục" – Geuis

3

Người dùng nào bạn đang chạy initdb? Nếu bạn không root, bạn có thể không có quyền tạo thư mục trong/usr/local. Tôi khuyên bạn nên tạo/usr/local/var/postgres như là người chủ, và chown'ing nó để xây dựng:

# mkdir -m 0700 -p /usr/local/var/postgres 
# chown construct /usr/local/var/postgres 

Sau đó initdb của bạn (chạy như xây dựng) nên có quyền.

Ngoài ra, lưu ý rằng tên người dùng Unix thường là tất cả chữ thường (nhưng cũng phân biệt chữ hoa chữ thường); là bạn chắc chắn Người dùng xây dựng của bạn có thực sự được viết hoa không? Nếu vậy, bạn có phải là thực sự chắc chắn bạn muốn nó được viết hoa —- rất nhiều thứ sẽ bị phá vỡ.

(FYI: Đối với câu hỏi Unix như thế này, bạn có thể tìm Unix.SE hay Ask Ubuntu cung cấp câu trả lời nhanh hơn)

5

Bạn thực sự cần phải SU cho người dùng postgres

  • sudo su - postgres

sau đó bạn có thể chạy lệnh

  • initdb -E UTF8 (Tôi thích thiết lập này bây giờ bởi vì UTF8 là khá linh hoạt và điều này sẽ tạo ra tất cả các cụm như UTF8 [trừ khi bạn chỉ định rõ ràng khác])

thì bạn cần phải tạo người dùng của bạn (nếu nó không có đã được tạo ra)

  • $ createuser -s -U postgres
  • $ Enter name of role to add: {{ my login name }} (điều này dường như Construct)

sau đó bạn có thể thoát ra khỏi postgres người dùng và bạn có thể tạo cơ sở dữ liệu của riêng bạn

  • $ createdb
2

Nếu bạn chạy trên arch linux, sử dụng như thế này:

sudo mkdir /var/lib/postgres 
    sudo chmod 775 /var/lib/postgres 
    sudo chown postgres /var/lib/postgres 

    sudo -i -u postgres 

    [postgres]$ initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data' 
    [postgres]$ exit 

    sudo systemctl start postgresql.service 

    sudo -i -u postgres 
+0

Tuyệt vời - được sử dụng để tạo thư mục dữ liệu tùy chỉnh! :-D –