PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cài đặt Postgres trên windows để sử dụng với Ruby-on-Rails

Một cách tiếp cận để cài đặt Postgres trên windows 7 để sử dụng làm cơ sở dữ liệu PostgreSQL cho dự án rails 3 (3.0.7).

Mở đầu (bạn có thể bỏ qua phần này)

Vì vậy, điều đầu tiên cần chỉ ra là Postgres không chỉ là một phần mở rộng tệp khác với .sqlite3, nó là một cơ chế toàn bộ để quản lý cơ sở dữ liệu của bạn. Do đó, nó có một mô hình máy khách / máy chủ, trong đó bạn sẽ cần thiết lập cả hai để sử dụng Postgres làm cơ sở dữ liệu cho ứng dụng rails của mình.

Động lực để vượt qua khó khăn đáng kể khi thiết lập Postgres so với thiết lập sqlite gần như dễ dàng:nếu bạn đang triển khai cho Heroku, họ hiện đang sử dụng Postgres, vì vậy một số lệnh gọi SQL của bạn tốt trên sqlite3 sẽ bị hỏng khi được sử dụng với Postgres. Việc gỡ lỗi các postgres cục bộ dễ dàng hơn nhiều so với khi nó trên máy chủ của Heroku.

Vì vậy, tôi đã làm những điều sau:(Tuyên bố từ chối trách nhiệm:Tôi có thể đã quên bao gồm một số điều tôi đã làm ... tôi đã mất hơn 48 giờ liên tục và đau đớn để làm cho nó hoạt động ... nếu lời khuyên sau đây không " Không có tác dụng với bạn thì tài liệu khổng lồ (2300 trang !!) nhưng rất kỹ lưỡng của Postgres sẽ hữu ích. Dù sao thì tôi cũng khuyên bạn nên tải xuống tài liệu này nếu bạn nghiêm túc về việc sử dụng Postgres vì ​​nó có rất nhiều tài liệu mà tôi chỉ mới bắt đầu để hiểu ý nghĩa của.) (Tuyên bố từ chối trách nhiệm thứ hai:Tôi gần như chắc chắn đã phá vỡ 20 nguyên tắc hợp lý của Postgres và để lộ các lỗ hổng bảo mật trong cơ sở dữ liệu Postgres trong khi làm như vậy. Nếu có bất kỳ điều rõ ràng nào mà người dùng Postgres có kinh nghiệm không đồng ý, vui lòng chỉnh sửa bài đăng của tôi.)

.Bước 1. Tải xuống và cài đặt PostgreSQL v9.0.4-1 từ đây vì ở đây cho biết chỉ 9.0.x sẽ được hỗ trợ trên windows 7. Tôi đã giữ tất cả các tùy chọn mặc định và chỉ sử dụng 'bí mật' làm mật khẩu khi được trình cài đặt Postgres nhắc cho một (một lần nữa không hoàn toàn chắc chắn hậu quả của việc chia sẻ thông tin đó trên internet là gì ... tôi chắc chắn sẽ sớm tìm ra). Bạn sẽ cần mật khẩu này trong bước 3.

.Bước 2. Thay đổi các biến môi trường như Đường dẫn ( cho hệ thống , không phải người dùng (tôi không chắc điều này có quan trọng hay không)) là:C:\Program Files\PostgreSQL\9.0\bin
(n.b. Tôi đang sử dụng cửa sổ 64 bit, do đó nó không được cài đặt cho 32 bit trong 'C:\ Program Files (x86) \ PostgreS ...')

Đừng quên thay đổi quyền truy cập vào thư mục PostgreSQL \ 9.0 và xóa mọi quyền chỉ đọc mặc định trên thư mục hoặc nội dung. (Bạn cũng có thể cần phải khởi động lại máy tính của mình để những quyền này có hiệu lực - cảm ơn @Gavin-mặc dù không có khả năng xảy ra).

.Bước 3. Kiểm tra cài đặt Postgres bằng cách cố gắng tạo cơ sở dữ liệu mới:Từ dòng lệnh:createdb -U postgres mydb_as_postgres .Bạn sẽ được nhắc nhập mật khẩu ngay bây giờ, nếu không, có thể bạn cần khởi động máy chủ trước (tôi không nhớ mình có cần thực hiện việc này hay không). Cách dễ nhất là thông qua pgAdmin III, phải là 'pgAdmin3.exe' trong một thư mục ở đâu đó như C:\Program Files\PostgreSQL\9.0\bin . Khi bạn đã bắt đầu pgAdmin III, sẽ có một bảng ở bên trái có tên là 'Trình duyệt đối tượng'. Trong này phải có một cây với:

Nhóm máy chủ> Máy chủ> PostgreSQL 9.0 (localhost:5432)

Nhấp chuột phải vào 'PostgreSQL 9.0 (localhost:5432)' và chọn 'Kết nối'.

createdb -U postgres mydb_as_postgres lệnh sẽ tạo một cơ sở dữ liệu mới có tên là 'mydb_as_postgres' mà bạn có thể kiểm tra bằng cách kích hoạt pgAdmin III và nhấp đúp vào 'PostgreSQL 9.0 (localhost:5432)'. Dưới đây phải có:

Databases (2) sẽ liệt kê 2 cơ sở dữ liệu được gọi là mydb_as_postgrespostgres

Tôi đã gọi nó là _as_postgres bởi vì -U postgres một phần của lệnh yêu cầu Postgres tạo cơ sở dữ liệu với người dùng postgres là chủ sở hữu của nó, mà bạn cần chỉ định khi bạn không đăng nhập với tư cách người dùng postgres. Tuy nhiên, tôi có tất cả các tệp của mình được lưu trữ dưới dạng người dùng 'AJames', vì vậy nếu bạn giống nhau và muốn tiếp tục phát triển ứng dụng của mình khi đăng nhập với tư cách người dùng khác, bạn cần tạo 'vai trò' Postgres cho người dùng đó ngay bây giờ (xem bước 4).

.Bước 4. Thông qua pgAdmin III. Nhấp chuột phải vào Vai trò đăng nhập (đối với tôi là):

Trình duyệt đối tượng> Nhóm máy chủ> Máy chủ> PostgreSQL 9.0 (localhost:5432)> Vai trò đăng nhập

Nhấp chuột phải vào Vai trò đăng nhập và chọn 'Vai trò đăng nhập mới ...' trong Tên vai trò, nhập tên người dùng hệ điều hành của bạn, đối với tôi là AJames và điền mật khẩu của bạn trong tab 'Đặc quyền vai trò', tôi đã kiểm tra tất cả các hộp, nhưng một người dùng postgres có kinh nghiệm có thể thực sự khuyên bạn chỉ nên kiểm tra 'quyền kế thừa từ vai trò cha' và 'có thể tạo đối tượng cơ sở dữ liệu' Nhưng tôi không phải là người dùng có kinh nghiệm và chỉ muốn gỡ lỗi các lệnh gọi SQL Rails trong Postgres vì ​​vậy Tôi cũng đã kiểm tra 'Người dùng siêu cấp' và 'Có thể tạo vai trò', để đề phòng.

.Bước 5. Bây giờ bạn có thể tạo cơ sở dữ liệu mới mà không cần đăng nhập với tư cách người dùng postgres. Hãy thử nhập:

createdb mydb_as_user

Hy vọng rằng điều này sẽ hiệu quả với bạn.

.Bước 6. Được rồi, vậy là bạn đã có tệp development.sqlite3 trong thư mục rails 'db /' của mình. Ban đầu, tôi sẽ đặt thử nghiệm tiếp theo là chuyển đổi từ sqlite3 sang psql.
Tuy nhiên, tôi không thể làm cho điều này hoạt động nhưng tôi đã cố gắng ở đây vì giải pháp tôi đã sử dụng yêu cầu phải bật dữ liệu trong ứng dụng Rails Heroku.com (thay vào đó hãy xem giải pháp từ bước 7 trở đi). Đối với những người chỉ có ứng dụng cục bộ và không có dữ liệu trong Heroku, họ không thể sử dụng cùng một cách tiếp cận, vì vậy họ có thể cần khám phá một cái gì đó như sau:

x6.1 Trước tiên, hãy kiểm tra 'psql' bằng cách thử một lệnh từ dòng lệnh của bạn như:

psql mydb_as_user

điều này sẽ hiển thị một cái gì đó giống như bên dưới (sau khi bạn đã nhập mật khẩu của mình):

C:>psql mydb_as_user
Password:
psql (9.0.4)
WARNING: Console code page (850) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

mydb5=# 

x6.2 thử nhập:

CREATE TABLE users_table (id integer, "name" text);

Nó sẽ hiển thị:

CREATE TABLE
mydb5=#

Nếu bạn đăng ký pgAdmin III, bạn sẽ thấy bảng ở đó dưới:

Trình duyệt đối tượng> Nhóm máy chủ> Máy chủ> PostgreSQL 9.0 (localhost:5432)> Cơ sở dữ liệu> mydb_as_user> Schemas> public> Tables> users_table>

x6.3 Được rồi, tiếp theo để thử chuyển đổi. Đã tải xuống tệp nhị phân biên dịch trước sqlite-shell cho windows.
x6.4 Tạo một thư mục mới, tôi đã sử dụng 'C:\ temp' và đặt sqlite3.exe và các tệp development.sqlite3 của bạn trong đó.
x6. 5 Sử dụng các lệnh sau (từ đây) để kết xuất cơ sở dữ liệu development.sqlite3 vào Postgres.

sqlite3 development .dump | psql development2

bạn có thể gặp lỗi như:

psql: FATAL: database "development2" does not exist

x6.6 vì vậy tôi đã vào pgAdmin III và tạo cơ sở dữ liệu phát triển 2, thử lại lệnh và nhận được:

ERROR:  syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
        ^
BEGIN
COMMIT

Như tôi đã nói, tôi không thể làm cho nó hoạt động được. Tôi chắc chắn rằng có một cách để khắc phục lỗi đó nhưng tôi đã nghĩ ra một cách khác và vì vậy tôi đã sử dụng giải pháp này thay thế (yêu cầu tài khoản Heroku có dữ liệu của bạn và thực hiện chuyển đổi từ sqlite3 sang psql bằng đá quý Taps (tôi tin tưởng):

.Bước 7. trong pgAdmin III, tôi đã tạo một cơ sở dữ liệu khác. Trong tab thuộc tính, tôi đặt tên:'development', owner:'AJames' (thay thế tên này bằng tên người dùng Windows của riêng bạn). Và trong tab đặc quyền, hãy đặt vai trò:'công khai' và chọn tùy chọn TẤT CẢ (nghĩ rằng tùy chọn này đặt lại thành bỏ chọn nên tôi không chắc điều đó là cần thiết).

.Bước 8. thêm gem 'pg', '0.11.0' vào tệp đá quý của bạn. Có thể bạn cũng sẽ muốn xóa:gem 'sqlite3' vào thời điểm này.

.Bước 9. đặt database.yml như được đề xuất ở đây thành:

development:
  adapter: postgresql
  database: db/development
  username: AJames # replace this with your own user name
  password: secret # replace this with your own password
  host: localhost
  encoding: UTF8
  pool: 5
  timeout: 5000

Nếu bạn đang làm việc trên một dự án nguồn mở và không muốn mật khẩu của mình được công bố công khai, hãy xem một số câu trả lời cho việc Cung cấp an toàn mật khẩu cơ sở dữ liệu trong ứng dụng Rails.

.Bước 10. từ dòng lệnh trong thư mục gốc của ứng dụng rails của bạn chạy:rake db:migrate Thao tác này sẽ tạo lược đồ mới và tất cả các bảng trong cơ sở dữ liệu Postgres.

.Bước 11. chạy heroku db:pull từ dòng lệnh của bạn (lại từ trong thư mục gốc của ứng dụng rails của bạn) để kéo tất cả dữ liệu của bạn xuống và vào cơ sở dữ liệu Postgres trống mới của bạn. Tôi nghĩ rằng tại thời điểm này, đá quý vòi của bạn sẽ thực hiện công việc này cho bạn.

.Bước 12. Hy vọng rằng không có bước 12! ... và bây giờ nó sẽ hoạt động cho bạn. Chúc bạn gỡ lỗi RoR PostgreSQL vui vẻ! Vui lòng chỉnh sửa hoặc cho tôi biết, nếu có bất kỳ lỗi nào trong điều này.

Ngoài ra, đây là danh sách các nội dung bổ sung có thể thú vị / hữu ích:

  • Đây là một bài đăng trên blog về mật khẩu Postgres, chúng dùng để làm gì, tại sao bạn cần chúng, cách thay đổi chúng, v.v.
  • Điều này, trong phần 'Tạo cơ sở dữ liệu không gian', hữu ích cho người mới hiểu về pg_hba.conf là gì và liên kết thứ hai màReno đã đưa ra ở trên, trong phần 'Sử dụng pgAdmin III GUI' rất hữu ích để xem liệu postgres có thực sự hoạt động hay không , trước khi cố gắng hoàn thiện với Rails (tức là hãy thử tạo cơ sở dữ liệu và đưa một bảng và một số dữ liệu vào đó).
  • Trong tài liệu Postgres khổng lồ nhưng rất toàn diện, tôi sẽ bắt đầu từ trang 58, 'I. hướng dẫn '. Sau đó, trên pdf trang 431 (!) Có 'Chương 17. Thiết lập và vận hành máy chủ' mà tôi cũng thấy hữu ích.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo chuỗi nếu không tồn tại

  2. Phiên bản postgresql 9.2 pg_dump không khớp

  3. Cách xác định các vấn đề về hiệu suất PostgreSQL với các truy vấn chậm

  4. PostgreSQL:Truy vấn không có đích cho dữ liệu kết quả

  5. Sự khác biệt giữa postgres và postgresql_psycopg2 làm công cụ cơ sở dữ liệu cho django là gì?