slam / psql-php

PostgreSQL自带的psql cli的PHP版本

v1.2.0 2023-11-20 15:23 UTC

This package is auto-updated.

Last update: 2024-09-20 18:23:46 UTC


README

Latest Stable Version Downloads Integrate Code Coverage

PostgreSQL自带的psql的PHP轻量级版本。

为什么

  1. 你在一个只使用PHP的环境中,比如PHP Docker镜像
  2. 你需要导入大量的pg_dump --inserts导出文件
  3. 你没有访问到原生的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函数消费的资源类型。