Un enfoque para instalar Postgres en Windows 7 para usar como base de datos PostgreSQL para un proyecto de Rails 3 (3.0.7).
Preámbulo (puede omitir este bit)
Entonces, lo primero que debe señalarse es que Postgres no es solo una extensión de archivo diferente de .sqlite3, es un mecanismo completo para administrar sus bases de datos. Como tal, tiene un modelo cliente/servidor, del cual deberá configurar ambos para usar Postgres como la base de datos para su aplicación Rails.
Motivación para pasar por el dolor considerable de la configuración de Postgres versus la configuración de sqlite casi sin esfuerzo:si está implementando en Heroku, actualmente están usando Postgres, por lo que algunas de sus llamadas SQL que están bien en sqlite3 se interrumpirán cuando se usan con Postgres. Es mucho más fácil depurar postgres localmente que cuando está en los servidores de Heroku.
Así que hice lo siguiente:(Descargo de responsabilidad:es posible que me haya olvidado de incluir algunas de las cosas que hice... me tomó más de 48 horas de dolor intermitente para que funcionara... si el siguiente consejo no funciona t funciona para usted, entonces la enorme (¡2300 páginas!) Pero la documentación de Postgres muy completa debería ayudar. Recomiendo descargar esto de todos modos si realmente quiere usar Postgres, ya que tiene una gran cantidad de material que acabo de comenzar. (Segundo descargo de responsabilidad:es casi seguro que he violado 20 pautas sensatas de Postgres y expuesto agujeros de seguridad en la base de datos de Postgres mientras lo hacía. Si hay algo obvio con lo que un usuario experimentado de Postgres no está de acuerdo, edite mi publicación).
.Paso 1. Descargue e instale PostgreSQL v9.0.4-1 desde aquí porque aquí dice que solo 9.0.x sería compatible con Windows 7. Mantuve todas las opciones predeterminadas y solo usé 'secreto' como contraseña cuando el instalador de Postgres me lo solicitó (nuevamente no estoy del todo seguro de cuáles son las consecuencias de compartir esa información en Internet... pronto lo descubriré, estoy seguro). Necesitará esta contraseña en el paso 3.
.Paso 2. Cambie las variables de entorno de modo que Path (for system , no usuario (no estoy seguro de si esto es significativo o no)) es:C:\Program Files\PostgreSQL\9.0\bin
No olvide cambiar los derechos de acceso a la carpeta PostgreSQL\9.0 y elimine los derechos de solo lectura predeterminados en la carpeta o el contenido. (Es posible que también deba reiniciar su computadora para que surtan efecto, gracias @Gavin, aunque no es probable). /P>
.Paso 3. Pruebe la instalación de Postgres intentando crear una nueva base de datos:Desde la línea de comando:createdb -U postgres mydb_as_postgres
.Se le debe solicitar que ingrese la contraseña ahora, si no es así, es posible que primero deba iniciar el servidor (no recuerdo si necesitaba hacer esto o no). La forma más fácil es a través de pgAdmin III, que debería ser 'pgAdmin3.exe' en una carpeta en algún lugar como C:\Program Files\PostgreSQL\9.0\bin
. Una vez que haya iniciado pgAdmin III, debería haber un panel a la izquierda llamado 'Explorador de objetos'. En esto debería haber un árbol con:
Grupos de servidores> Servidores> PostgreSQL 9.0 (localhost:5432)
Haga clic derecho en 'PostgreSQL 9.0 (localhost:5432)' y seleccione 'Conectar'.
El createdb -U postgres mydb_as_postgres
El comando debe crear una nueva base de datos llamada 'mydb_as_postgres' que puede verificar iniciando pgAdmin III y haciendo doble clic en 'PostgreSQL 9.0 (localhost:5432)'. Debajo de esto debe haber:
Databases (2)
que debería enumerar 2 bases de datos llamadas mydb_as_postgres
y postgres
Lo llamé _as_postgres
porque el -U postgres
parte del comando le dice a Postgres que cree la base de datos con el usuario de postgres como propietario, que debe especificar cuando no haya iniciado sesión como usuario de postgres. Sin embargo, tengo todos mis archivos almacenados como usuario 'AJames', por lo que si es el mismo y desea seguir desarrollando su aplicación cuando inició sesión como un usuario diferente, debe crear un 'rol' de Postgres para ese usuario ahora (vea el paso 4).
.Paso 4. A través de pgAdmin III. Haga clic con el botón derecho en Roles de inicio de sesión (que para mí está en):
Explorador de objetos> Grupos de servidores> Servidores> PostgreSQL 9.0 (localhost:5432)> Funciones de inicio de sesión
Haga clic con el botón derecho en Funciones de inicio de sesión y seleccione 'Nueva función de inicio de sesión...' en Nombre de función, ingrese el nombre de usuario de su sistema operativo, que para mí es AJames, y complete su contraseña en la pestaña 'Privilegios de función', verifiqué todo las casillas, pero un usuario experimentado de Postgres probablemente recomendaría encarecidamente marcar solo 'hereda los derechos de los roles principales' y 'puede crear objetos de base de datos'. Pero no soy un usuario experimentado y solo quiero depurar las llamadas Rails SQL en Postgres, así que También verifiqué 'Superusuario' y 'Puede crear roles', por si acaso.
.Paso 5. Ahora debería poder crear una nueva base de datos sin iniciar sesión como usuario de postgres. Intenta escribir:
createdb mydb_as_user
Con suerte, esto debería funcionar para usted.
.Paso 6. Bien, tienes un archivo development.sqlite3 en el directorio 'db/' de Rails. Inicialmente, iba a configurar la siguiente prueba para convertir esto de sqlite3 a psql.
No pude hacer que esto funcionara, pero dejé mis intentos aquí porque la solución que usé requería tener los datos en una aplicación de Rails. Heroku.com (ver en cambio la solución del paso 7 en adelante). Para aquellos que solo tienen una aplicación local y no tienen datos en Heroku, no pueden usar el mismo enfoque, por lo que es posible que deban explorar algo como esto:
x6.1 Primero, pruebe 'psql' probando un comando desde su línea de comando como:
psql mydb_as_user
esto debería mostrar algo como lo siguiente (después de haber ingresado su contraseña):
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 intente ingresar:
CREATE TABLE users_table (id integer, "name" text);
Debería mostrar:
CREATE TABLE
mydb5=#
Si revisa pgAdmin III, debería ver la tabla debajo:
Explorador de objetos> Grupos de servidores> Servidores> PostgreSQL 9.0 (localhost:5432)> Bases de datos> mydb_as_user> Esquemas> public> Tables> users_table>
x6.3 De acuerdo, ahora probaré la conversión. Binario precompilado sqlite-shell descargado para Windows.
x6.4 Cree un nuevo directorio, usé 'C:\temp' y puse el sqlite3.exe y sus archivos de desarrollo.sqlite3 en él.
x6. 5 Use los siguientes comandos (que son de aquí) para volcar la base de datos development.sqlite3 en Postgres.
sqlite3 development .dump | psql development2
es posible que obtenga un error como:
psql: FATAL: database "development2" does not exist
x6.6, así que ingresé a pgAdmin III e hice una base de datos de desarrollo 2, probé el comando nuevamente y obtuve:
ERROR: syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
^
BEGIN
COMMIT
Como dije, no pude hacerlo funcionar. Estoy seguro de que hay una forma de sortear ese error, pero pensé en una forma diferente y, en su lugar, utilicé esta solución (que requiere una cuenta de Heroku para tener sus datos y realiza la conversión de sqlite3 a psql usando la gema Taps (I creer):
.Paso 7. en pgAdmin III creé otra base de datos. En la pestaña de propiedades, configuré el nombre:'desarrollo', propietario:'AJames' (reemplace esto con su propio nombre de usuario de Windows). Y en la pestaña de privilegios, configure el rol:'público' y marque la opción TODOS (pensé que esto se restablece a desmarcado, así que no estoy seguro de que sea necesario).
.Paso 8. agregar gem 'pg', '0.11.0'
a su archivo de gemas. Probablemente también desee eliminar:gem 'sqlite3'
en este punto también.
.Paso 9. establezca base de datos.yml como se sugiere aquí para:
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
Si está trabajando en un proyecto de código abierto y no desea que su contraseña esté disponible públicamente, eche un vistazo a algunas de las respuestas a Proporcionar de forma segura la contraseña de la base de datos en una aplicación de Rails.
.Paso 10. desde la línea de comando en el directorio raíz de su aplicación Rails, ejecute:rake db:migrate
Esto creará el nuevo esquema y todas las tablas en la base de datos de Postgres.
.Paso 11. ejecutar heroku db:pull
desde su línea de comando (nuevamente desde el directorio raíz de su aplicación Rails) para extraer todos sus datos y colocarlos en su nueva base de datos Postgres vacía. Creo que, llegados a este punto, la gema de grifos estará haciendo este trabajo por ti.
.Paso 12. ¡Esperemos que no haya un paso 12! ... y ahora debería estar funcionando para usted. ¡Feliz depuración de RoR PostgreSQL! Edite, o hágamelo saber, si hay algún error en esto.
Además, aquí hay una lista de cosas adicionales que pueden ser interesantes/útiles:
- Esta es una publicación de blog sobre las contraseñas de Postgres, para qué sirven, por qué las necesita, cómo cambiarlas, etc.
- Esto, en 'Creación de una base de datos espacial', es útil para que los novatos entiendan de qué se trata pg_hba.conf y el segundo enlace que Reno proporcionó anteriormente, en 'Uso de pgAdmin III GUI' es útil para probar si Postgres realmente funciona , antes de intentar adaptarlo a Rails (es decir, intente crear una base de datos y ponerle una tabla y algunos datos).
- En la enorme pero muy completa documentación de Postgres, comenzaría en la página 58, 'I. tutorial'. Luego, en la página pdf 431(!) hay un 'Capítulo 17. Configuración y operación del servidor' que también encontré útil.