php5 ve libpq4'te pg_version() sorunu

From: Volkan YAZICI <volkan(dot)yazici(at)gmail(dot)com>
To: PostgreSQL Türkiye <pgsql-tr-genel(at)postgresql(dot)org>
Subject: php5 ve libpq4'te pg_version() sorunu
Date: 2005-04-12 16:04:10
Message-ID: 7104a737050412090463df864c@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-tr-genel

Merhaba,

Sistemimdeki PostgreSQL 8.0.1'i, 8.0.2'ye güncelledikten sonra, PHP
5.0.3'i de baştan derledim. Fakat PHP ile pg_version() çıktısı almaya
çalıştığımda sunucu sürümü 8.0.2 gözükürken, istemci (libpq) sürümü
8.0.1 gözüküyor. İşin garip yanı ise /usr/bin/php, libpq4 kullanıyor
gözüküyor:

$ ldd /usr/bin/php | grep libpq
libpq.so.4 => /usr/lib/libpq.so.4 (0xb7f9a000)

#postgresql(at)irc(dot)freenode(dot)net kanalında da soruna bir çözüm bulunamadı,
ama problemin PHP 5'ten kaynaklandığı düşünülüyor. Sanırım aynı sorun
PHP 4'te yok.

Konu hakkında fikri olan var mı acaba? Eğer herhangi bir fikriniz
yoksa bile, şöyle bir 15 dakika süreniz varsa, PostgreSQL 8.0.2 ile
PHP 5.0.3 sürümünü birlikte derleyip, pg_version() çıktısından beni
haberdar ederseniz çok sevinirim. En azından sorunun benden mi, yoksa
PHP'nin bu sürümünden mi kaynaklı olduğu anlaşılabilir.

İyi çalışmalar.

P.S. Bundan sonraki kısım biraz işin teknik detayına kaçıp izlediğim
adımlardan bahsediyor:

knt (~) [501:0]$ cd /usr/local/src/php-5.0.3/
knt (...rc/php-5.0.3) [502:0]$ vim ext/pgsql/pgsql.c
# pg_version() fonksiyonunun aslında bir php_pgsql_get_link_info()
# fonksiyonu çağrısını olduğunu öğreniyorum.
936: PHP_FUNCTION(pg_version)
937: {
938: php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,
PHP_PG_VERSION);
939: }
#...
814: static void php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAMETERS,
int entry_type)
# ...
860: case PHP_PG_VERSION:
861: array_init(return_value);
862: add_assoc_string(return_value, "client", PG_VERSION, 1);
863: #if HAVE_PQPROTOCOLVERSION
864: add_assoc_long(return_value, "protocol",
PQprotocolVersion(pgsql));
865: #if HAVE_PQPARAMETERSTATUS
# ...
# 862. satırdan PG_VERSION adlı değişkenin istemci sürümünü belirlemekte
# kullanıldığını anlıyorum.

# Bakıyorum PHP'nin kendi header'ları içinde dişe dokunur bir şey var mı?
knt (...rc/php-5.0.3) [504:0]$ grep PG_VERSION -RH *
ext/pgsql/pgsql.c: php_info_print_table_row(2, "PostgreSQL(libpq)
Version", PG_VERSION);
ext/pgsql/pgsql.c: if (atof(PG_VERSION) >= 7.2) {
ext/pgsql/pgsql.c:#define PHP_PG_VERSION 7
ext/pgsql/pgsql.c: case PHP_PG_VERSION:
ext/pgsql/pgsql.c: add_assoc_string(return_value,
"client", PG_VERSION, 1);
ext/pgsql/pgsql.c:
php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_VERSION);
# Buradan elim boş döndüm.
# Devam ediyorum:

knt (...rc/php-5.0.3) [506:0]$ cd /usr/include
knt (/usr/include) [508:0]$ grep PG_VERSION -IRH *
pg_config.h:#define PG_VERSION "8.0.2"
pg_config.h:#define PG_VERSION_STR "PostgreSQL 8.0.2 on
i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.3.5 (Debian
1:3.3.5-12)"
postgresql/server/miscadmin.h:#define PG_VERSIONSTR "postgres
(PostgreSQL) " PG_VERSION "\n"
postgresql/server/pg_config.h:#define PG_VERSION "8.0.2"
postgresql/server/pg_config.h:#define PG_VERSION_STR "PostgreSQL 8.0.2
on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.3.5 (Debian
1:3.3.5-12)"
postgresql/server/catalog/pg_version.h:#ifndef PG_VERSION_H
postgresql/server/catalog/pg_version.h:#define PG_VERSION_H
postgresql/server/catalog/pg_version.h:#endif /* PG_VERSION_H */
postgresql/server/catalog/catversion.h: * stored in PG_VERSION. It
shouldn't matter to end users, but during
# Sonunda PG_VERSION'un nereden geldiğini buluyorum, ama buradaki
# PG_VERSION değerinin ise 8.0.2 olduğunu görüyorum.
# Peki PHP nereden buldu bu 8.0.1 değerini?

# Belki yıldırım çarpmıştır:
root (/tmp) [505:0]# cat sil.php
<?php $conn = pg_connect("user=knt dbname=template1");
var_dump(pg_version($conn)); ?>
root (/tmp) [506:0]# php < sil.php
array(3) {
["client"]=>
string(5) "8.0.1"
["protocol"]=>
int(3)
["server"]=>
string(5) "8.0.2"
}
# Yok gene olmadı :(

Responses

Browse pgsql-tr-genel by date

  From Date Subject
Next Message Devrim GUNDUZ 2005-04-14 13:37:03 Tasarım hakkında
Previous Message Devrim GUNDUZ 2005-04-11 08:37:12 PostgreSQL 8.0.2 duyuruldu.