Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

banco de dados

Tem alguma maneira de usar o postgre em conjunto do wamp ? para o curso posso fazer normalmente com mysql, mas onde estou estagiando vou ter que usar o postgre + php e laravel, gostaria de saber como seria a melhor maneira de solucionar isso.

6 respostas

Dá pra conectar facilmente com o PostgreSQL

No diretório config, abre o arquivo database.php e modifique as linhas conforme abaixo.

Onde está

'default' => env('DB_CONNECTION', 'mysql'),

Troque para

'default' => env('DB_CONNECTION', 'pgsql'),

Logo abaixo nesse mesmo arquivo, há uma parte digna de atenção.

'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'database' => database_path('database.sqlite'),
            'prefix' => '',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

        'pgsql' => [
            'driver' => 'pgsql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],
],

Observe o nó 'pgsql'. Ai estão as configurações da conexão, se você não mudar nada ai, o Laravel vai seguir as credenciais de acesso configuradas dentro do arquivo .env e se elas não forem encontradas, vai usar os dados do segundo parâmetro da função env.

Exemplo

/*
*  Se existir DB_DATABASE dentro do 
*  arquivo .env, então vai usá-lo , caso contrário, vai usar o valor 'forge'
*/
'database' => env('DB_DATABASE', 'forge')

Eu uso bastante o Laravel conectado com PostgreSQL, prefiro ele que MySQL. Se eu puder te ajudar em alguma coisa, estou a disposição

Ok, fiz isso, mas estou com erros

SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost' (using password: YES) (SQL: select * from produtos)

Eu instalei o postgre, pelo o instalador padrão dele, no caso eu não sei o login, eu acesso o banco pelo PgAdmin. Tem alguma outra alternativa ?

Se você instalou no Windows. Deve ter colocado uma senha pro usuário postgres.

Você tá conectando via pgAdmin com um usuário e senha ( provavelmente postgres + uma senha que colocou na instalação ).

Agora, vai dentro do arquivo .env na raiz do projeto e modifique ele assim:

DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=NomeDoSeuBancoDeDados
DB_USERNAME=postgres
DB_PASSWORD=suasenha

Execute o comando abaixo na raiz do seu projeto

php artisan config:clear

Verifique se resolve o problema

PDOException could not find driver

está dando esse erro acima

e este QueryException could not find driver (SQL: select * from produto)

solução!

Esse erro costuma acontecer quando a extensão do postgres não está ativa no PHP.

Abra o arquivo php.ini na raiz da sua instalação PHP, procure pela linhas abaixo e tire o ';' do inicio da mesma conforme abaixo:

Linha original

;extension=php_pdo_pgsql.dll
;extension=php_pgsql.dll

Como deve ficar ( Sem o ';' no começo )

extension=php_pdo_pgsql.dll
extension=php_pgsql.dll

Tem que reiniciar o Apache depois da modificação.

Veja se resolve

ae deu certo vlw!!!