How do I connect to PostgreSQL without specifying a database name?

PhpPostgresql

Php Problem Overview


I need to connect to some PostgreSQL server providing some credentials, and print a list of available databases on that host for a given user.

I am trying:

<?php
    $connection = pg_connect("host=localhost user=testuser password=123 connect_timeout=5");
?>

And I get:

Warning: pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: FATAL: database "testuser" does not exist in /var/www/test.php on line 56

I thought this must be possible because phpPgAdmin does it, but I looked at phpPpAdmin sources and found that they connect to a database named template1.

From http://www.postgresql.org/docs/8.1/interactive/manage-ag-templatedbs.html:

> CREATE DATABASE actually works by copying an existing database. By > default, it copies the standard system database named template1. Thus > that database is the "template" from which new databases are made. If > you add objects to template1, these objects will be copied into > subsequently created user databases. This behavior allows site-local > modifications to the standard set of objects in databases. For > example, if you install the procedural language PL/pgSQL in template1, > it will automatically be available in user databases without any extra > action being taken when those databases are made.

Is there a way to connect without specifying any database?

Php Solutions


Solution 1 - Php

You have to connect to a database. Which database you could use for a "maintenance database" depends on the installation and the subsequent administration. After a default installation there are 2 databases that could be used for the initial connection - "template1" and "postgres". It's wise to create a new user and a database with the same name and use those.

Solution 2 - Php

Why don't you connect to your Maintenance DB (usually postgres?). I don't know if that'll work. But I believe you'll have to query this database anyway to retrieve the databases available to a given user.

Solution 3 - Php

As the manual of pg_connect says the dbname parameter in the connection string defaults to the value of the user parameter. That's why it uses 'testuser'. If you want dbname to be empty, try "... dbname='' ...".

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSilver LightView Question on Stackoverflow
Solution 1 - PhpMilen A. RadevView Answer on Stackoverflow
Solution 2 - PhpontrackView Answer on Stackoverflow
Solution 3 - PhprikView Answer on Stackoverflow