PostgreSql
优质
小牛编辑
148浏览
2023-12-01
curtis18/swoft-pgsql
是对 PostgreSQL
在 Swoft 中使用的简单封装,支持连接池配置和某些非连接池的原生配置函数。
安装
curtis18/swoft-pgsql
需要使用 Swoole 的 swoole/ext-postgresql
扩展。而作为 Swoft 的一个额外的扩展组件,需要手动安装:
Composer 安装
composer require curtis18/swoft-pgsql
Git 仓库
参与贡献
欢迎参与贡献,您可以
- fork 开发仓库 curtis18/swoft-pgsql
- 修改代码然后发起 PR
- 阅读 提交代码 的注意事项
基础配置
Swoft 应用的 PostgreSQL 配置都在配置文件 app/bean.php 中。
use Swoft\Pgsql\PgsqlDb;
'pgsql' => [
'class' => PgsqlDb::class,
'host' => '127.0.0.1',
'port' => 5432,
'database' => 'dbname',
'schema' => ['postgis', 'public'],
'charset' => 'utf8',
'user' => 'username',
'password' => 'pass'
],
- class 指定当前配置驱动类型
- host 连接地址 默认
127.0.0.1
- port 端口 默认
5432
- database 连接数据库 默认
postgres
连接池配置
Swoft 所有连接池配置都差不多,配置都在配置文件 app/bean.php 中,默认的连接池名為 pgsql.pool。
'pgsql.pool' => [
'class' => \Swoft\Pgsql\Pool::class,
'pgsqlDb' => bean('pgsql'),
'minActive' => 2,
'mixActive' => 20,
'maxWait' => 0,
'maxWaitTime' => 0,
'maxIdleTime' => 60,
],
每一个 worker 都会创建一个同样的连接池。并不是越多越好,参数配置要根据,机器配置和 worker 个数衡量。使用连接池
<?php declare(strict_types=1);
namespace App\Model\Data;
use Swoft\Pgsql\Pool;
use Swoft\Bean\Annotation\Mapping\Bean;
use Swoft\Bean\Annotation\Mapping\Inject;
use Swoft\Config\Annotation\Mapping\Config;
/**
* Class Test
*
* @since 2.0
*
* @Bean()
*/
class Test
{
/**
* @Inject("pgsql.pool")
* @var Pool
*/
private $pgsql;
public function getTest(): array
{
$connection = $this->pgsql->createConnection();
return $connection->select("SELECT * FROM test;");
}
public function fetchNumTest(): array
{
$connection = $this->pgsql->createConnection();
return $connection->selectFetchNum("SELECT testid, testname FROM test;");
}
public function bindingTest(int $id = 1, string $name = "myname"): array
{
$connection = $this->pgsql->createConnection();
return $connection->select("SELECT * FROM test WHERE testid = AND testname = ;", array($id, $name));
}
// 非连接池的原生配置函数
public function copyFromTest(): bool
{
$table = 'test';
$data = array(
array('1|C252525A|0|0|02921|02921|2|0|Welcome To Swoft|02921||benny|2019-09-03 14:40:55|1|'),
array('2|C252525B|0|0|02921|02921|2|0|Welcome To Swoole|02921||curtis|2019-07-03 14:40:55|1|'),
);
$connection = $this->pgsql->createConnection();
$connection->select("TRUNCATE ".$table.";");
return $connection->copyFrom($table, $data);
}
// 非连接池的原生配置函数
public function copyToTest(): array
{
$table = 'test';
$connection = $this->pgsql->createConnection();
return $connection->copyTo($table);
}
}