Pendekatan untuk menginstal Postgres di windows 7 untuk digunakan sebagai database PostgreSQL untuk proyek Rails 3 (3.0.7).
Pembukaan (Anda dapat melewati bagian ini)
Jadi hal pertama yang harus ditunjukkan adalah bahwa Postgres bukan hanya ekstensi file yang berbeda dari .sqlite3, ini adalah mekanisme keseluruhan untuk mengelola database Anda. Karena itu, ia memiliki model klien/server, yang mana Anda harus menyiapkan keduanya untuk menggunakan Postgres sebagai database untuk aplikasi Rails Anda.
Motivasi untuk melalui banyak kesulitan dalam penyiapan Postgres versus penyiapan sqlite yang hampir mudah:jika Anda menggunakan Heroku, mereka saat ini menggunakan Postgres sehingga beberapa panggilan SQL Anda yang baik-baik saja di sqlite3 akan rusak saat digunakan dengan Postgres. Jauh lebih mudah untuk men-debug postgres secara lokal daripada saat berada di server Heroku.
Jadi saya melakukan hal-hal berikut:(Penafian:Saya mungkin lupa untuk memasukkan beberapa hal yang saya lakukan... saya membutuhkan lebih dari 48 jam rasa sakit untuk membuatnya bekerja... jika saran berikut tidak' t bekerja untuk Anda maka besar (2300 halaman!!) tetapi dokumentasi Postgres yang sangat menyeluruh akan membantu. Saya akan merekomendasikan mengunduh ini jika Anda serius menggunakan Postgres karena memiliki banyak materi yang baru saja saya mulai untuk memahami pentingnya.)(Penafian kedua:Saya hampir pasti telah melanggar 20 pedoman Postgres yang masuk akal dan membuka lubang keamanan di database Postgres saat melakukannya. Jika ada hal yang jelas tidak disetujui oleh pengguna Postgres yang berpengalaman, silakan edit posting saya.)
.Langkah 1. Unduh dan instal PostgreSQL v9.0.4-1 dari sini karena di sini dikatakan hanya 9.0.x yang akan didukung di windows 7. Saya menyimpan semua opsi default dan hanya menggunakan 'rahasia' sebagai kata sandi ketika diminta oleh penginstal Postgres untuk satu (sekali lagi tidak sepenuhnya yakin apa konsekuensi dari berbagi info itu di internet ... akan segera tahu saya yakin). Anda akan memerlukan sandi ini di langkah 3.
.Langkah 2. Ubah variabel lingkungan sehingga Path (untuk sistem , bukan pengguna (saya tidak yakin apakah ini signifikan atau tidak)) adalah:C:\Program Files\PostgreSQL\9.0\bin
(n.b. Saya menggunakan windows 64-bit sehingga tidak diinstal untuk 32-bit di 'C:\Program Files (x86)\PostgreS...')
Jangan lupa untuk mengubah hak akses ke folder PostgreSQL\9.0 dan menghapus semua hak baca-saja default pada folder atau konten.(Anda mungkin juga perlu me-restart komputer Anda agar ini berlaku - terima kasih @Gavin -walaupun tidak mungkin).
.Langkah 3. Uji instalasi Postgres dengan mencoba membuat database baru:Dari baris perintah:createdb -U postgres mydb_as_postgres
.Anda akan diminta untuk memasukkan kata sandi sekarang, jika tidak, mungkin Anda harus memulai server terlebih dahulu (saya tidak ingat apakah saya perlu melakukan ini atau tidak). Cara termudah adalah melalui pgAdmin III, yang seharusnya 'pgAdmin3.exe' di folder di suatu tempat seperti C:\Program Files\PostgreSQL\9.0\bin
. Setelah Anda memulai pgAdmin III seharusnya ada panel di sebelah kiri yang disebut 'Object Browser'. Dalam hal ini harus ada pohon dengan:
Grup Server> Server> PostgreSQL 9.0 (localhost:5432)
Klik kanan pada 'PostgreSQL 9.0 (localhost:5432)' dan pilih 'Connect'.
createdb -U postgres mydb_as_postgres
perintah harus membuat database baru bernama 'mydb_as_postgres' yang dapat Anda periksa dengan menjalankan pgAdmin III dan mengklik dua kali pada 'PostgreSQL 9.0 (localhost:5432)'. Di bawah ini harus ada:
Databases (2)
yang seharusnya mencantumkan 2 database yang disebut mydb_as_postgres
dan postgres
Saya menyebutnya _as_postgres
karena -U postgres
bagian dari perintah memberitahu Postgres untuk membuat database dengan pengguna postgres sebagai pemiliknya, yang perlu Anda tentukan saat Anda tidak masuk sebagai pengguna postgres. Saya memiliki semua file saya disimpan sebagai pengguna 'AJames' jadi jika Anda sama dan ingin terus mengembangkan aplikasi Anda saat masuk sebagai pengguna yang berbeda, Anda perlu membuat 'peran' Postgres untuk pengguna itu sekarang (lihat langkah 4).
.Langkah 4. Melalui pgAdmin III. Klik kanan pada Peran Masuk (yang bagi saya ada di dalamnya):
Object Browser> Server Groups> Servers> PostgreSQL 9.0 (localhost:5432)> Login Roles
Klik kanan pada Login Roles dan pilih 'New Login Role...' di Role name, masukkan nama pengguna sistem operasi Anda, yang bagi saya adalah AJames, dan isi kata sandi Anda di bawah tab 'Role Privileges', saya centang semua kotak, tetapi pengguna postgres yang berpengalaman kemungkinan akan sangat menyarankan untuk hanya memeriksa 'mewarisi hak dari peran induk' dan 'dapat membuat objek database' Tapi saya bukan pengguna yang berpengalaman dan hanya ingin men-debug panggilan Rails SQL di Postgres jadi Saya juga memeriksa 'Pengguna Super' dan 'Dapat membuat peran', untuk berjaga-jaga.
.Langkah 5. Anda sekarang harus dapat membuat database baru tanpa masuk sebagai pengguna postgres. Coba ketik:
createdb mydb_as_user
Semoga ini berhasil untuk Anda.
.Langkah 6. Oke, jadi Anda punya file development.sqlite3 di direktori 'db/' Rails Anda. Awalnya saya akan menetapkan tes berikutnya sebagai mengonversi ini dari sqlite3 ke psql.
Saya tidak dapat menjalankannya, tetapi saya meninggalkan upaya saya di sini karena solusi yang saya gunakan mengharuskan data dalam aplikasi Rails aktif Heroku.com (sebagai gantinya lihat solusi dari langkah 7 dan seterusnya). Bagi mereka yang hanya memiliki aplikasi lokal dan tidak memiliki data di Heroku, mereka tidak dapat menggunakan pendekatan yang sama, sehingga mereka mungkin perlu menjelajahi sesuatu seperti ini:
x6.1 Pertama, uji 'psql' dengan mencoba perintah dari baris perintah Anda seperti:
psql mydb_as_user
ini akan menampilkan sesuatu seperti di bawah ini (setelah Anda mengetikkan kata sandi Anda):
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 coba masukkan:
CREATE TABLE users_table (id integer, "name" text);
Seharusnya menampilkan:
CREATE TABLE
mydb5=#
Jika Anda memeriksa pgAdmin III, Anda akan melihat tabel di bawah:
Object Browser> Server Groups> Servers> PostgreSQL 9.0 (localhost:5432)> Database> mydb_as_user> Schemas> public> Tables> users_table>
x6.3 Oke, selanjutnya coba konversi. Mengunduh biner terkompilasi sqlite-shell untuk windows.
x6.4 Buat direktori baru, saya menggunakan 'C:\temp' dan meletakkan file sqlite3.exe dan development.sqlite3 Anda di dalamnya.
x6. 5 Gunakan perintah berikut (yang berasal dari sini) untuk membuang database development.sqlite3 ke dalam Postgres.
sqlite3 development .dump | psql development2
Anda mungkin mendapatkan kesalahan seperti:
psql: FATAL: database "development2" does not exist
x6.6 jadi saya masuk ke pgAdmin III dan membuat database development 2, mencoba perintah itu lagi dan mendapatkan:
ERROR: syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
^
BEGIN
COMMIT
Seperti yang saya katakan, saya tidak bisa membuatnya bekerja. Saya yakin ada cara untuk mengatasi kesalahan itu tetapi saya memikirkan cara yang berbeda dan jadi saya menggunakan solusi ini (yang memerlukan akun Heroku untuk memiliki data Anda dan melakukan konversi dari sqlite3 ke psql menggunakan permata Taps (Saya percaya):
.Langkah 7. di pgAdmin III saya membuat database lain. Di bawah tab properti saya menetapkan nama:'pengembangan', pemilik:'AJames' (ganti ini dengan nama pengguna Windows Anda sendiri). Dan di bawah tab hak istimewa, atur peran:'publik' dan centang opsi SEMUA (pikir ini disetel ulang menjadi tidak dicentang jadi saya tidak yakin itu perlu).
.Langkah 8. tambahkangem 'pg', '0.11.0'
ke file permata Anda. Anda mungkin juga ingin menghapus:gem 'sqlite3'
pada titik ini juga.
.Langkah 9. atur database.yml seperti yang disarankan di sini ke:
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
Jika Anda sedang mengerjakan proyek open source dan tidak ingin kata sandi Anda tersedia untuk umum, lihat beberapa jawaban untuk Memberikan kata sandi database dengan aman di aplikasi Rails.
.Langkah 10. dari baris perintah di direktori root aplikasi Rails Anda, jalankan:rake db:migrate
Ini akan membuat skema baru dan semua tabel di database Postgres.
.Langkah 11. jalankan heroku db:pull
dari baris perintah Anda (sekali lagi dari di direktori root aplikasi Rails Anda) untuk menarik semua data Anda ke bawah dan ke dalam database Postgres kosong Anda yang baru. Saya pikir pada titik ini permata ketuk Anda akan melakukan pekerjaan ini untuk Anda.
.Langkah 12. Semoga tidak ada langkah 12! ...dan sekarang seharusnya bekerja untuk Anda. Selamat melakukan debugging RoR PostgreSQL! Harap edit, atau beri tahu saya, jika ada kesalahan dalam hal ini.
Juga, inilah daftar hal-hal tambahan yang mungkin menarik/berguna:
- Ini adalah posting blog tentang kata sandi Postgres, untuk apa kata sandi itu, mengapa Anda membutuhkannya, cara mengubahnya, dll.
- Ini, di bawah 'Membuat basis data spasial', berguna bagi pemula untuk memahami tentang apa pg_hba.conf dan tautan kedua yang diberikan Reno di atas, di bawah 'Menggunakan pgAdmin III GUI' berguna untuk menguji untuk melihat apakah postgres benar-benar berfungsi , sebelum mencoba menyesuaikannya dengan Rails (yaitu mencoba membuat database dan memasukkan tabel dan beberapa data ke dalamnya).
- Dalam dokumentasi Postgres yang besar namun sangat komprehensif, saya akan memulai dari halaman 58, 'I. tutorial'. Kemudian di halaman pdf 431(!) ada 'Bab 17. Penyiapan dan pengoperasian server' yang menurut saya juga berguna.