Uma abordagem para instalar o Postgres no Windows 7 para uso como banco de dados PostgreSQL para um projeto Rails 3 (3.0.7).
Preâmbulo (você pode pular esta parte)
Portanto, a primeira coisa a destacar é que o Postgres não é apenas uma extensão de arquivo diferente de .sqlite3, é todo um mecanismo para gerenciar seus bancos de dados. Como tal, ele possui um modelo cliente/servidor, do qual você precisará configurar ambos para usar o Postgres como banco de dados para seu aplicativo Rails.
Motivação para passar por uma considerável dificuldade de configuração do Postgres versus configuração quase sem esforço do sqlite:se você estiver implantando no Heroku, eles estão usando o Postgres, então algumas de suas chamadas SQL que funcionam bem no sqlite3 serão interrompidas quando usadas com o Postgres. É muito mais fácil depurar o postgres localmente do que quando está nos servidores do Heroku.
Então eu fiz as seguintes coisas:(Isenção de responsabilidade:eu posso ter esquecido de incluir algumas das coisas que fiz... levei mais de 48 horas de dor para fazer funcionar... se o conselho a seguir não funcionar t funciona para você, então a enorme (2300 páginas!!) mas muito completa documentação do Postgres deve ajudar. Eu recomendaria fazer o download de qualquer maneira se você estiver levando a sério o uso do Postgres, pois ele tem muito material que eu acabei de começar para entender o significado de.) (Segundo aviso:eu quase certamente quebrei 20 diretrizes sensatas do Postgres e expus falhas de segurança no banco de dados Postgres ao fazê-lo. Se houver alguma coisa óbvia com a qual um usuário experiente do Postgres discorde, edite minha postagem.)
.Etapa 1. Baixe e instale o PostgreSQL v9.0.4-1 daqui porque aqui disse que apenas 9.0.x seria suportado no Windows 7. Eu mantive todas as opções padrão e usei apenas 'secret' como a senha quando solicitado pelo instalador do Postgres para uma (novamente não tenho certeza de quais são as consequências de compartilhar essa informação na internet... logo descobrirei, tenho certeza). Você precisará dessa senha na etapa 3.
.Etapa 2. Altere as variáveis de ambiente de forma que Path (para sistema , não usuário (não tenho certeza se isso é significativo ou não)) é:
C:\Program Files\PostgreSQL\9.0\bin
(n.b. Estou em janelas de 64 bits, portanto, não está sendo instalado para 32 bits em 'C:\Program Files (x86)\PostgreS...')
Não se esqueça de alterar os direitos de acesso para a pasta PostgreSQL\9.0 e remover quaisquer direitos readonly padrão na pasta ou conteúdo. (Você também pode precisar reiniciar o computador para que eles entrem em vigor - obrigado @Gavin -embora não seja provável).
.Etapa 3. Teste a instalação do Postgres tentando criar um novo banco de dados:Da linha de comando:
createdb -U postgres mydb_as_postgres
.Você deve ser solicitado a digitar a senha agora, se não for, pode ser que você precise iniciar o servidor primeiro (não me lembro se precisava fazer isso ou não). A maneira mais fácil é através do pgAdmin III, que deve ser 'pgAdmin3.exe' em uma pasta em algum lugar como C:\Program Files\PostgreSQL\9.0\bin
. Depois de iniciar o pgAdmin III, deve haver um painel à esquerda chamado 'Object Browser'. Neste deve haver uma árvore com:Grupos de servidores> Servidores> PostgreSQL 9.0 (localhost:5432)
Clique com o botão direito do mouse em 'PostgreSQL 9.0 (localhost:5432)' e selecione 'Conectar'.
O
createdb -U postgres mydb_as_postgres
O comando deve criar um novo banco de dados chamado 'mydb_as_postgres' que você pode verificar acionando o pgAdmin III e clicando duas vezes em 'PostgreSQL 9.0 (localhost:5432)'. Sob este deve haver:Databases (2)
que deve listar 2 bancos de dados chamados mydb_as_postgres
e postgres
Eu chamei de
_as_postgres
porque o -U postgres
parte do comando diz ao Postgres para criar o banco de dados com o usuário postgres como seu proprietário, que você precisa especificar quando não estiver conectado como usuário postgres. Eu tenho todos os meus arquivos armazenados como usuário 'AJames', portanto, se você é o mesmo e deseja continuar desenvolvendo seu aplicativo quando conectado como um usuário diferente, você precisa criar uma 'função' do Postgres para esse usuário agora (consulte a etapa 4). .Etapa 4. Através do pgAdmin III. Clique com o botão direito do mouse em Funções de login (que para mim está em):
Pesquisador de objetos> Grupos de servidores> Servidores> PostgreSQL 9.0 (localhost:5432)> Funções de login
Clique com o botão direito do mouse em Login Roles e selecione 'New Login Role...' em Role name, coloque o nome de usuário do seu sistema operacional, que para mim é AJames, e preencha sua senha na guia 'Role Privileges', verifiquei todos as caixas, mas um usuário experiente do postgres provavelmente recomendaria fortemente verificar apenas os 'herda direitos de funções pai' e 'pode criar objetos de banco de dados' Mas eu não sou um usuário experiente e só quero depurar chamadas Rails SQL no Postgres, então Eu também verifiquei o 'Superusuário' e 'Pode criar funções', apenas no caso.
.Etapa 5. Agora você deve ser capaz de criar um novo banco de dados sem estar conectado como usuário postgres. Tente digitar:
createdb mydb_as_user
Espero que isso funcione para você.
.Etapa 6. Ok, então você tem um arquivo development.sqlite3 em seu diretório 'db/' do Rails. Inicialmente eu ia definir o próximo teste como converter isso de sqlite3 para psql.
Eu não consegui fazer isso funcionar, mas deixei minhas tentativas aqui como a solução que usei exigia ter os dados em um aplicativo Rails em Heroku.com (veja a solução da etapa 7 em diante). Para aqueles que têm apenas um aplicativo local e nenhum dado no Heroku, eles não podem usar a mesma abordagem, então podem precisar explorar algo assim:
x6.1 Primeiro, teste 'psql' tentando um comando da sua linha de comando como:
psql mydb_as_user
isso deve exibir algo como abaixo (depois de digitar sua senha):
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 tente digitar:
CREATE TABLE users_table (id integer, "name" text);
Deve exibir:
CREATE TABLE
mydb5=#
Se você verificar no pgAdmin III, deverá ver a tabela abaixo:
Pesquisador de objetos> Grupos de servidores> Servidores> PostgreSQL 9.0 (localhost:5432)> Bancos de dados> mydb_as_user> Schemas> public> Tables> users_table>
x6.3 Ok, próximo a tentar a conversão. Baixei o binário pré-compilado do sqlite-shell para windows.
x6.4 Crie um novo diretório, usei 'C:\temp' e coloquei o sqlite3.exe e seus arquivos development.sqlite3 nele.
x6. 5 Use os seguintes comandos (que são daqui) para despejar o banco de dados development.sqlite3 no Postgres.
sqlite3 development .dump | psql development2
você pode receber um erro como:
psql: FATAL: database "development2" does not exist
x6.6 então entrei no pgAdmin III e fiz um banco de dados de desenvolvimento 2, tentei o comando novamente e obtive:
ERROR: syntax error at or near "PRAGMA"
LINE 1: PRAGMA foreign_keys=OFF;
^
BEGIN
COMMIT
Como eu disse, não consegui fazer funcionar. Tenho certeza de que há uma maneira de contornar esse erro, mas pensei em uma maneira diferente e, em vez disso, usei esta solução (que requer uma conta Heroku para ter seus dados e faz a conversão de sqlite3 para psql usando a gem Taps (eu acreditam):
.Etapa 7. no pgAdmin III criei outro banco de dados. Na guia de propriedades, defino nome:'desenvolvimento', proprietário:'AJames' (substitua isso pelo seu próprio nome de usuário do Windows). E na guia de privilégios, defina role:'public' e marque a opção ALL (pensei que isso é redefinido para desmarcado, então não tenho certeza se é necessário).
.Etapa 8. adicionar
gem 'pg', '0.11.0'
para o seu arquivo gem. Você provavelmente também desejará remover a:gem 'sqlite3'
neste momento também. .Etapa 9. defina database.yml como sugerido aqui 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
Se você está trabalhando em um projeto de código aberto e não quer que sua senha seja disponibilizada publicamente, dê uma olhada em algumas das respostas para Fornecer com segurança a senha do banco de dados em um aplicativo Rails.
.Etapa 10. da linha de comando no diretório raiz do seu aplicativo Rails, execute:
rake db:migrate
Isso criará o novo esquema e todas as tabelas no banco de dados Postgres. .Etapa 11. execute
heroku db:pull
da sua linha de comando (novamente no diretório raiz do seu aplicativo Rails) para puxar todos os seus dados para o seu novo banco de dados Postgres vazio. Acho que neste momento sua joia de torneiras estará fazendo esse trabalho para você. .Etapa 12. Espero que não haja passo 12! ... e agora deve estar funcionando para você. Boa depuração RoR PostgreSQL! Por favor, edite, ou me avise, se houver algum erro nisso.
Além disso, aqui está uma lista de coisas adicionais que podem ser interessantes/úteis:
- Esta é uma postagem de blog sobre as senhas do Postgres, para que servem, por que você precisa delas, como alterá-las etc.
- Isso, em 'Criando um banco de dados espacial', é útil para iniciantes entenderem do que se trata o pg_hba.conf e o segundo link que Reno deu acima, em 'Usando a GUI do pgAdmin III' é útil para testar se o postgres está realmente funcionando , antes de tentar ajustá-lo ao Rails (ou seja, tente criar um banco de dados e colocar uma tabela e alguns dados nele).
- Na enorme mas muito abrangente documentação do Postgres, eu começaria na página 58, 'I. tutorial'. Então, na página 431(!) do PDF, há o 'Capítulo 17. Configuração e operação do servidor' que também achei útil.