slam / psql-php
PHP version of psql cli that comes with PostgreSQL
Fund package maintenance!
Slamdunk
paypal.me/filippotessarotto
Installs: 7 954
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 2
Open Issues: 1
pkg:composer/slam/psql-php
Requires
- php: ~8.4.0 || ~8.5.0
- ext-pgsql: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.89.1
- phpstan/phpstan: ^2.1.31
- phpstan/phpstan-phpunit: ^2.0.7
- phpstan/phpstan-strict-rules: ^2.0.7
- phpunit/phpunit: ^12.4.1
This package is auto-updated.
Last update: 2025-10-29 08:16:42 UTC
README
PHP light version of psql that comes with PostgreSQL.
Why
- You are inside a PHP only environment, like a PHP Docker image
- You need to import a large
pg_dump --insertsdump - You don't have access to the native
psqlclient
Performance
Speed is exactly the same of the original psql binary thanks to streams usage.
Supported formats
| Input type | Example | Supported? |
|---|---|---|
pg_dump output (with COPY commands) |
as is | ❌ |
pg_dump --inserts output |
as is | ✔️ |
| Single query on single line | SELECT NOW(); |
✔️ |
| Single query on multiple lines | SELECTNOW(); |
✔️ |
| Multiple queries on separated single or multiple lines | SELECT NOW();SELECTNOW(); |
✔️ |
| Multiple queries on single line | SELECT NOW();SELECT NOW(); |
❌ |
When using pg_dump --inserts it is highly recommended to also set --rows-per-insert=1000 to speed performances up.
Usage
The library provides two usages, the binary and the \SlamPsql\Psql class.
From CLI
$ ./psql -h
Usage: psql [OPTIONS]
--host Connect to host
--port Port number
--username User for login
--password Password to use
--database Database to use
--connect_timeout Connect timeout to use
$ printf "CREATE DATABASE foobar;\nSELECT datname FROM pg_database;" | ./psql
foobar
$ ./psql --database foobar < foobar_huge_dump.sql
From PHP
$psql = new \SlamPsql\Psql('localhost', 5432, 'my_username', 'my_password', 'my_database'); $return = $psql->run(\STDIN, \STDOUT, \STDERR); exit((int) (true !== $return)); // With the connect_timeout argument $psql = new \SlamPsql\Psql('localhost', 5432, 'my_username', 'my_password', 'my_database', 5); $return = $psql->run(\STDIN, \STDOUT, \STDERR); exit((int) (true !== $return));
\SlamPsql\Psql::run accepts any type of resource consumable by fgets/fwrite functions.