slam / psql-php
PostgreSQL自带的psql cli的PHP版本
v1.2.0
2023-11-20 15:23 UTC
Requires
- php: ~8.2.0 || ~8.3.0
- ext-pgsql: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.38.2
- phpstan/phpstan: ^1.10.43
- phpstan/phpstan-phpunit: ^1.3.15
- phpstan/phpstan-strict-rules: ^1.5.2
- phpunit/phpunit: ^10.4.2
This package is auto-updated.
Last update: 2024-09-20 18:23:46 UTC
README
PostgreSQL自带的psql的PHP轻量级版本。
为什么
- 你在一个只使用PHP的环境中,比如PHP Docker镜像
- 你需要导入大量的
pg_dump --inserts
导出文件 - 你没有访问到原生的
psql
客户端
性能
由于使用了流,速度与原始的psql
二进制文件完全相同。
支持的格式
当使用pg_dump --inserts
时,强烈建议同时设置--rows-per-insert=1000
以提高性能。
使用方法
库提供了两种使用方式,二进制和\SlamPsql\Psql
类。
从命令行界面
$ ./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
从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
接受任何可以被fgets/fwrite
函数消费的资源类型。