PHP Velho Oeste 2024

PDO_PGSQL DSN

(PECL PDO_PGSQL >= 0.1.0)

PDO_PGSQL DSNPostgreSQL 데이터베이스에 접속하기

설명

PDO_PGSQL Data Source Name (DSN)은 공백으로 분리되는 다음의 요소로 만들어집니다:

DSN 접두사

DSN 접두사는 pgsql: 입니다.

host

데이터베이스 서버의 호스트이름.

port

데이터베이스 서버가 작동하는 포트.

dbname

데이터베이스 이름.

user

접속에 사용하는 사용자 이름. DSN에 사용자 이름을 지정하면, PDO는 PDO 생성자에 넘긴 사용자 이름 값을 무시합니다.

password

접속에 사용하는 사용자 패스워드. DSN에서 패스워드를 지정하면, PDO는 PDO 생성자에 넘긴 패스워드 인수 값을 무시합니다.

Note:

bytea 필드는 스트림으로 반환됩니다.

예제

Example #1 PDO_PGSQL DSN 예제

다음 예제는 PostgreSQL 데이터베이스에 접속하는 PDO_PGSQL DSN을 보여줍니다:

pgsql:host=localhost;port=5432;dbname=testdb;user=bruce;password=mypass

add a note add a note

User Contributed Notes 7 notes

up
20
tim at buttersideup dot com
16 years ago
You can also connect to PostgreSQL via a UNIX domain socket by leaving the host empty.  This should have less overhead than using TCP e.g.:

$dbh = new PDO('pgsql:user=exampleuser dbname=exampledb password=examplepass');

In fact as the C library call PQconnectdb underlies this implementation, you can supply anything that this library call would take - the "pgsql:" prefix gets stripped off before PQconnectdb is called, and if you supply any of the optional arguments (e.g. user), then these arguments will be added to the string that you supplied...  Check the docs for your relevant PostgreSQL client library: e.g.

http://www.postgresql.org/docs/8.3/static/libpq-connect.html

If you really want, you can use ';'s to separate your arguments - these will just be converted to spaces before PQconnectdb is called.

Tim.
up
7
enclaved
8 years ago
I must say Chris C. is correct, yet sadly downvoted. It is irrelevant if semicolons are converted to spaces in the DSN string. The entire point of PDO is expressed in the first word of the acronym: "Portable"; it provides a uniform way of accessing databases of various flavors, and since a semicolon is its standard DSN delimiter, it SHOULD be used (at miniscule overhead if taking conversion into account, mind you) to facilitate uniformity and potentially ease portability.
up
7
other at yetterprises dot com
10 years ago
I wanted to point out something that is not obvious from the documentation here or in any google searches that I've done.  Everything after the 'pgsql:' is passed to the PQconnectdb function of the pgsql library as a connection string.  This means 2 important key things:

1) 'username' is not a valid option of the PQconnectdb connection string.  Use 'user' instead (ie 'user=<username>' instead of 'username=<username>'). 
2) You can utilize ANY option of the PQconnectdb function in this way.  For those trying to figure out how to enable ssl connections through the pgsql PDO connection process, like me, as per Postgresql standards, the 'sslmode' parameter can be set via the DSN.  So, for example, 'sslmode=require' will require an ssl connection.  Look at the documentation for the pgsql library version you are using for all options of both the sslmode parameter and any other parameters that are available.
up
15
Chris C.
18 years ago
The PDO_PGSQL DSN should be seperated by semi-colons not spaces. It should follow the convention like the rest of the PDO DSNs.

'pgsql:dbname=example;user=nobody;password=change_me;host=localhost'
up
7
fandi
8 years ago
We can also alternatively put the username and password in the second and third argument of PDO::__construct()
<?php
$dbh
= new PDO("pgsql:dbname=$dbname;host=$host", $dbuser, $dbpass);
?>
up
-1
Ivan Bragin (aywan at aywan dot ru)
6 years ago
How to add application name to dsn string.
You can make query like "SET application_name=...." or just add something to dsn string:
$dbh = new PDO('....;options=--application_name=WEB_APPLICATION');

We have a lot of php apps and it's hard to understand what app made slow query. But this small hack help us.
up
-77
tmairs at aasland dot com
14 years ago
The DSN syntax shown here did not work for me, but this did:

<?php
$dbh
= new PDO("pgsql:dbname=$dbname;host=$host", $username, $password );
?>

As opposed to

<?php
$dbh
= new PDO('pgsql:dbname=$dbname;
                           host=$host;
                           username=$username;
                           password=$password'
);
?>

Which makes sense and is more PGSQL standard.
To Top