2017-02-08 1 views
7

Я использую следующее соединение для подключения к Postgres SQL без базы данных, как мне нужно, чтобы извлечь все имена баз данных позже для конфигурацииКак подключиться к базе данных Postgres без указания имени базы данных в PDO?

try{ 
    $this->connection = new \PDO($this->database.":host=".$this->host,$this->user,$this->password); 
    $this->connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 
    return $this->connection; 
}catch(\PDOException $e){ 
    echo $e->getMessage(); 
} 

Но я получаю следующее сообщение об ошибке

SQLSTATE[08006] [7] FATAL: database "admin" does not exist 

Ниже являются значения, которые устанавливаются в свойствах:

$this->database = pgsql 
$this->host = localhost 
$this->user = admin 
$this->password = admin 

Может кто-нибудь, пожалуйста, помогите мне, как подключиться к Postgres SQL остроумия Хет любой выбор базы данных с PHP PDO

+0

использовать базу данных 'postgres' для подключения к дальнейшим базам данных –

+0

Использовать базу данных pgsql. имя базы данных отличается. – Deep

+0

@ Deep, о котором я упомянул, это databaseType, например MySQL, postgres –

ответ

0

Как всегда есть базы данных по умолчанию, называемых Postgres на PostgreSQL вы можете по умолчанию установить соединение с ним так:

$dbh = new PDO($this->database.":host=".$this->host.";dbname=postgres",$this->user,$this->password); 

Тогда вы будете делать еще один после до Неплохо.

0

Есть варианты дерева:

  • Postgres
  • template0
  • template1

Пожалуйста, имейте в виду, что подключение к базе данных требуется разрешение. Here - описание что это за шаблоны. Вы можете посмотреть postgresql default database. Это совсем другая тема.

0

Этот ответ объясняет это хорошо:

https://stackoverflow.com/questions/2370525#2411860

Вам необходимо явно указать на одну базу данных, которая всегда гарантированно существует, как описано выше, а именно «Postgres»: $this->connection = new PDO($this->database.":host=".$this->host.";dbname=postgres",$this->user,$this->password);

... или, если это необходимо, установите $this->dbname = postgres, а затем $this->connection = new PDO($this->database.":host=".$this->host.";dbname=".$this->dbname,$this->user,$this->password);

0

Для чего я понял из сообщения об ошибке, кажется, что ваш DSN ошибочен (admin, который является вашим именем пользователя и/или паролем, интерпретируется как имя базы данных) ...

0

В дополнение к текущим превосходным ответам также рассмотрите возможность создания db для каждого пользователя unix (или, по крайней мере, для «admin» «user»), поэтому команда «psql» работает без параметров, и вы можете удобно использовать ее для интерактивного использования.

0

У Postgresql нет возможности подключения к серверу базы данных без указания существующей базы данных.

Причина вы получаете эту ошибку:

SQLSTATE[08006] [7] FATAL: database "admin" does not exist 

, что если вы не указали имя базы данных, то по умолчанию будет пытаться подключиться к базе данных с тем же именем, что и пользователь вы указали (см. описание параметра подключения dbname).

При PostgreSQL сначала инициализируются, создаются три базы данных по умолчанию:

  • Postgres - предназначенный в качестве общей базы данных назначения для пользователя postgres администратора по умолчанию для доступа
  • template0 - мастер-шаблона - не должны быть изменены после инициализации
  • template1 - по умолчанию шаблон - используется для создания всех новых баз данных с

См Template Databases для их полного описания.

Если вы хотите получить список доступных баз данных, вам необходимо будет подключиться к одной из вышеуказанных баз данных.

Я обычно использую template1 для этого, потому что в теории баз данных postgres, возможно, были сняты, и это опасно для подключения к базе данных template0 в случае, если вы случайно изменить его. Поскольку template1 используется в качестве шаблона по умолчанию при создании баз данных, он, скорее всего, будет существовать.

Также обратите внимание, что любой пользователь, с которым вы подключаетесь, должен иметь разрешение на подключение к данной базе данных. Все три из этих баз данных принадлежат пользователю postgres, а это означает, что если вы не подключаетесь с помощью этого пользователя, вам необходимо убедиться, что пользователь, которому вы пользуетесь, имеет разрешение на доступ к базе данных.

Смежные вопросы