在windows上监视postgre 数据库 ,使用啥方式?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在windows上监视postgre 数据库 ,使用啥方式?相关的知识,希望对你有一定的参考价值。

碰到一个测试性能的问题,稍微一跑,CPU就到顶。想看看是不是postgre的问题,又苦于没有监视方法,想到sqlserver可以用profile,想问一下,postgre 有没有类似的监视软件。平台是windows。

 1. 安装Linux操作系统  注意把gdb、Emacs或DDD这些开发工具都安装上。如果是在虚拟机上安装,依然需要设置Linux系统的网络环境;另外需要设置文件共享,方便windows下面的postgreSQL源码能在Linux下面访问到。

  2. 安装PostgreSQL
  useradd postgre

  (自动建立 postgre 组;设计人员为了安全考虑,PostgreSQL 不能以root 用户运行,所以必须建立对应的用户和组。)
  解压到 /usr/local/src
  tar xvfz postgresql-8.4.tar.gz
  cd postgresql-8.4
  ./configure --prefix=/usr/local/pgsql --enable-debug --enable-assert --without-readline --without-zlib
  make
  make install
  chown -R postgre.postgre /usr/local/pgsql

  3. 设置Postgres环境变量(非必须)
  vi ~postgre/.bash_profile
  添加:
  PGLIB=/usr/local/pgsql/lib
  PGDATA=$HOME/data
  PATH=$PATH:/usr/local/pgsql/bin
  MANPATH=$MANPATH:/usr/local/pgsql/man
  export PGLIB PGDATA PATH MANPATH

  4. 建立数据库
  以 postgres 用户登录:
  su postgre
  建立数据库目录:
  mkdir data
  启动数据库引擎:
  initdb –D “数据库目录”
  之后可以根据提示,通过psql进入数据库

  5. 构造PostgreSQL调试环境
  先 psql template1进去,然后
  select pg_backend_pid();
  获得id,就是gdb后面用到的数字
  gdb /usr/local/pgsql/bin/postgres 997(pid的数字)
  如果只使用gdb,全部是命令行界面;而Emac、DDD分别是彩色、黑白用户交互式图形界面。

  6. 使用gdb进行调试
参考技术A 创狡诈盅沙腾腾叵

PHP - 从本地主机连接到 heroku PostGres 数据库(在 Windows 上)

【中文标题】PHP - 从本地主机连接到 heroku PostGres 数据库(在 Windows 上)【英文标题】:PHP - Connecting to heroku PostGres database from localhost (on Windows) 【发布时间】:2017-05-11 02:19:24 【问题描述】:

我正在尝试使用托管在 heroku 上的 PostGres 数据库,我需要从本地计算机连接到它。这是我正在使用的凭据示例:

params:
  driver: pdo_pgsql
  host: e5-31-281-414-28.compute-1.amazonaws.com
  dbname: b6m44bwjmaa41n
  user: sgjwiakskki
  password: e4ks28ajgs87
  port: 5432

^^ 我更改了这些凭据,但它们的格式是这样的。

当我尝试使用pg_connect 连接时,如下所示:

$dbconn = pg_connect("e5-31-281-414-28.compute-1.amazonaws.com port=5432 dbname=b6m44bwjmaa41n user=sgjwiakskki password=e4ks28ajgs87") or die('Could not connect: ' . pg_last_error());

我收到此错误:

pg_connect(): Unable to connect to PostgreSQL server: could not translate host name "***.compute-1.amazonaws.com" to address: Unknown host 

当我尝试使用 Doctrines DBAL 包连接时,我得到了同样的错误:

Uncaught exception 'PDOException' with message 'SQLSTATE[08006] [7] could not translate host name "e5-31-281-414-28.compute-1.amazonaws.com" to address: Unknown host' in C:\wamp64\www\project\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\AbstractPostgreSQLDriver.php on line 85

我阅读了所有关于从外部连接到 heroku 的教程,但我无法弄清楚这一点。我可以使用 heroku 工具带通过命令行进行连接。我可以连接到 pgAdmin 3。但似乎无法连接到这样的网络应用程序。

【问题讨论】:

【参考方案1】:

正如手册所说,你应该尝试一下。如下所示。

http://php.net/manual/en/function.pg-connect.php

$dbconn = pg_connect("host=e5-31-281-414-28.compute-1.amazonaws.com port=5432 dbname=b6m44bwjmaa41n user=sgjwiakskki password=e4ks28ajgs87");

说明 资源 pg_connect ( string $connection_string [, int $connect_type ])

connection_string 可以为空以使用所有默认参数,或者 它可以包含一个或多个以空格分隔的参数设置。 每个参数设置的形式为keyword = value。周围空间 等号是可选的。写入空值或值 包含空格,用单引号括起来,例如,keyword = 'a 价值'。值中的单引号和反斜杠必须转义 带有反斜杠,即 \' 和 \.

更新:

我没有 php。所以,我刚刚从旧的 ubuntu 存储库安装了 php5.6 和 php5.6-pqsql 包(我使用的是 Linux Mint 18.1,32 位)

$ date
Tue Dec 27 00:49:11 +04 2016
$ grep install /var/log/dpkg.log

2016-12-27 00:05:11 install php-common:all <none> 1:47+deb.sury.org~xenial+1
...
2016-12-27 00:05:22 install php5.6:all <none> 5.6.29-1+deb.sury.org~xenial+1
...
2016-12-27 00:22:26 status installed php5.6-pgsql:i386 5.6.29-1+deb.sury.org~xenial+1
... 

然后在 heroku 上创建帐户。设置一个数据库,我正在添加连接凭据(因为我不需要它)。

Host
    ec2-54-217-212-8.eu-west-1.compute.amazonaws.com
Database
    d464heusrdn2k5
User
    mgtvhefjhzilai
Port
    5432
Password
    fd6aa97d31b25c26a41a8211008f1838abd76d7715dcac7c742bfc55f37bd50f

以上给出,

$ php -v
PHP 5.6.29-1+deb.sury.org~xenial+1 (cli) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

$ php -a
Interactive mode enabled

php > $dbconn = pg_connect("host=ec2-54-217-212-8.eu-west-1.compute.amazonaws.com port=5432 dbname=d464heusrdn2k5 user=mgtvhefjhzilai password=fd6aa97d31b25c26a41a8211008f1838abd76d7715dcac7c742bfc55f37bd50f");
php > $sql = "create table lorem (id int not null, foo varchar(15), primary key (id));";
php > $r = pg_query($dbconn, $sql);
php > $tbls = "select * from information_schema.tables";
php > $qr = pg_query($dbconn, $tbls);
php > while($r = pg_fetch_array($qr)) 
php  print_r($r);
php  
Array
(
    [0] => d464heusrdn2k5
    [table_catalog] => d464heusrdn2k5
    [1] => public
    [table_schema] => public
    [2] => lorem
    [table_name] => lorem
    [3] => BASE TABLE
    [table_type] => BASE TABLE
    [4] => 
    [self_referencing_column_name] => 
    [5] => 
    [reference_generation] => 
    [6] => 
    [user_defined_type_catalog] => 
    [7] => 
    [user_defined_type_schema] => 
    [8] => 
    [user_defined_type_name] => 
    [9] => YES
    [is_insertable_into] => YES
    [10] => NO
    [is_typed] => NO
    [11] => 
    [commit_action] => 
)
Array

【讨论】:

我尝试将文字包裹起来并添加空格,但没有改变任何东西。我在帖子中提到我也尝试使用 DBAL,所以这不是我使用 pg_connect 的问题。 DBAL 从我发布的那个 YAML 文件中获取参数。 让我创建并检查一个【参考方案2】:

谢谢marmeladze!通过像那样走出你的方式并向我展示它对你有用,我可以看到问题很可能是我使用了错误的凭据。原来有两个问题,错误的凭据是第一个。第二个是我需要将sslmode=require 放入$connection_string。 所以字符串变成了这样:

$dbconn = pg_connect("host=ec2-**-***-***-45.compute-1.amazonaws.com port=5432 dbname=e4ngs3d4risaw9 user=s52mt674s3sjd password=p31mgss562sts7e3kebie3j sslmode=require")

在我“尝试”修复凭据后(注意密码是不同的格式,我为其分配了错误的变量),错误消息 unable to resolve host 错误消失了,取而代之的是两个新错误。第一个是:

Unable to connect to PostgreSQL server: FATAL: password authentication failed for user

第二个我忘了保存,但它说明了提供的用户名没有出现在 pg_hba.conf 文件中,对于提供的主机(它为主机提供了 IP)。我尝试编辑 pg_hba.conf 文件,但后来发现一篇关于常见错误消息及其含义的文章: https://devcenter.heroku.com/articles/postgres-logs-errors#fatal-no-pg_hba-conf-entry-for-host-user-u-database-d-ssl-off 这意味着您正在尝试在没有 SSL 的情况下进行连接。

致命:主机“...”、用户“u...”、数据库“d...”没有 pg_hba.conf 条目, SSL 关闭

您正在尝试建立没有 SSL 的数据库连接。 SSL 所有连接都需要。请参阅您的文档 关于如何建立加密连接的 postgres 驱动程序。

所以添加sslmode=require 修复了那个问题。然后身份验证问题显然是密码问题,我仔细检查了密码中缺少一个字母。解决了所有问题,现在我可以连接了。再次感谢!

更新:只是想补充一下我遇到的另一个错误,以及它的原因。我尝试使用 DBAL 连接,但收到此错误:

PDOException' with message 'SQLSTATE[08006] [7] FATAL: password authentication failed for user "SYSTEM"' in C:\wamp64\www\myproject\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\AbstractPostgreSQLDriver.php on line 85

它试图与SYSTEM 用户连接。问题是我的 YAML 文件,它有 username: hs62ksi62sj2,而它应该是 user: hs62ksi62sj2

所以工作的 YAML 文件是:

params:
  driver: pdo_pgsql
  host: ec2-**-***-***-45.compute-1.amazonaws.com
  dbname: e4ngs3d4risaw9 
  user: s52mt674s3sjd 
  password: p11mgss562sts7e3kebiesf
  port: 5432
  sslmode: require

【讨论】:

以上是关于在windows上监视postgre 数据库 ,使用啥方式?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 7 上安装 Postgres for PHP(64 位)

在Macbook上创建的Postgres DB的Ruby on Rails项目需要在Windows 10上访问

在Windows上保存性能监视器中添加的内容

系统监视器

Postgres 恒定 30% 的 CPU 使用率

Postgres无法在Azure中的Windows Server 2016上启动