За последние 24 часа нас посетили 17823 программиста и 1629 роботов. Сейчас ищут 950 программистов ...

свой layer для pg или некорректная отработка pg_query

Тема в разделе "PostgreSQL", создана пользователем dj--alex, 14 окт 2009.

  1. dj--alex

    dj--alex Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    184
    Симпатии:
    0
    решил попробовать написать layer для совместимости с другими базами данных
    путем перевода mysql команд для других баз данных
    посмотрел имеющиеся проэкты, в общем не впечатлило что-то доставлять, и не факт что быстро работать будет.
    решил сделать своё.
    сначала все шло отлично, соединения с 2 типами баз налаживались, как надо
    получилось сэмулировать несколько простых команд , в т.ч. SELECT DATABASE . которая в postgre вроде как не поддерживается.
    а на самых обычных запросах что то непонятное творится
    нельзя даже CREATE TABLE ili CREATE DATABASE.... да даже сущ. сист. таблицы не посмотреть SELECT * FROM `sequences`;

    пишет какой то бред в неизвестной кодировке
    Warning: pg_query() [function.pg-query]: Query failed: ERROR: отноС?ение "sequences" РЅРµ существует in /media/D/Work/KERNEL/dj/site/dbscore.lib on line 790
    посмотрел с utf-8 - там бред какой то и правда ERROR: отношение "sequences" не существует
    на create или drop операции тоже ругается... типа синтаксис неверный. хотя я 100500% уверен что он был отправлен правильно, специально с манами сверялся, он ничем не отличается от Mysql-ного...



    вот собственно программа.
    http://eternity.chg.su/dbs/filemgr.php? ... c22dcd392c


    PS Ubuntu 9.04 64 bit (amd)
    PPS задолбался этот постгре ручками из консоли запускать :( я думал отсутствие автозапуска установленных сервисов осталось в прошлом веке.

    есть в принципе и неотлаженные старые баги...
    как выяснить в какой кодировке выдает данные mysql и сменить ее например... т.к. бэкапы работают только до тех пор пока там кто нибудь не напишет что то кириллицей, потом все ???????? ??????? будет.

    вот немного кода, который не открыт в программе.
    Код (Text):
    1.  
    2. function dbs_query ($cmd,$connect,$dbtype) {
    3. if ($dbtype=="") echo ">>fixme>>dbs_query - Dbtype not set.<br>";
    4.    if (($dbtype=="pg")AND($cmd=="SHOW DATABASES")) $cmd="SELECT datname FROM pg_database";
    5. ....
    6.  
    7. function dbs_fetch_row ($a,$dbtype) { //changed all
    8.     if ($dbtype=="pg") return pg_fetch_row ($a);
    9. ....
    10. function dbs_selectdb ($dbselected,$connect,$dbtype){
    11.  if ($dbtype=="pg") {  
    12. global $pgconn;  // не фонтан конечно, но это работает :)
    13.                             echo "pgconn=$pgconn <br>";
    14.                            $result=pg_connect ($pgconn.' dbname='.$dbselected);
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Вполне известная кодировка :) utf-8

    Я вообще никакой линуксоид, но разве прописать его в init.d не работает?


    http://www.google.com.ua/search?q=смена+кодировки+mysql
     
  3. dj--alex

    dj--alex Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    184
    Симпатии:
    0
    я вообще не понимаю честно как могут не выполняться любые абсолютно запросы... кроме эмулироемых SHOW TABLES и SHOW DATABASE
    я даже пробовал маленькими буквами писать запросы, или искажать синтаксис намеренно...
    у меня за все это веселье отвечает w.php . нифига не понятно.



    просто как бы веб по дефолту с 1251 работает ... ну читать сообщения мне это не мешает.
    если pg знает что апач+php будут отдавать 1251 зачем он пишет свои pscpscpscp (или ему еще это "сказать" надо?, типа SET NAMES)

    про смену кодировки я уже нашел... если с внедренрением будет не так чтото отделю тему
    сейчас это неважно.

    да будет работать, возмущает тот факт что программа поставилась, и не прописалась
    mysql да и все остальное автоматически вроде как подразумевали что их будут использовать
    а постгре видимо знает что его будут так это изредка запускать
     
  4. dj--alex

    dj--alex Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    184
    Симпатии:
    0
    да видимо дофига тут людей знающих постгре.

    UPD все вопросы из P.S. решены успешно.
     
  5. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Are you sure?))))))
    http://www.postgresql.org/docs/8.4/static/sql.html

    В PostgreSQL в данном случае нельзя использовать кавычки.

    mysql:
    [sql]SELECT `id`, `date`, `table`, `desc`
    FROM `this_table`[/sql]

    postgres:
    [sql]SELECT id, date, table, desc
    FROM this_table[/sql]
     
  6. dj--alex

    dj--alex Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    184
    Симпатии:
    0
    я уже пробовал без кавычек - не помогает.
     
  7. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Значит, так пробовал. Читай мануал, учи синтаксис.
     
  8. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    И не поможет.

    Ибо представление sequnces(представление, а не сист. таблица, ога) не включено в путь просмотра по умолчанию и к нему нужно обращатся так:
    [sql]
    SELECT * FROM information_schema.sequences;
    [/sql]

    Если же хочется работать с таблицами, а не представлениями то можно так(хотя ИМХО много лишних букв и плохо читаемо):
    [sql]
    SELECT * FROM pg_class WHERE relkind='S';
    [/sql]

    Для общего развития:

    http://www.postgresql.org/docs/current/ ... HEMAS-PATH
    http://www.postgresql.org/docs/current/ ... class.html
    http://www.postgresql.org/docs/8.4/inte ... ences.html

    P.S. И да ИМХО PostgreSQL позитивная вещь :)