Russian Qt Forum
Апрель 28, 2024, 18:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Linux + PostgreSQL 9.0.3  (Прочитано 4843 раз)
FalconHAM
Гость
« : Март 24, 2011, 11:57 »

Переустановил openSUSE на 11.4 (недавно вышла).
В предыдущей (suse 11.3) стоял постгрес версии 8.4 в новой 9.0.3
Установил постгрес из репы сообщества.
Теперь не могу открыть БД из приложения. Грустный

Код:
bool MW::connectDataBase()
{
myDB = QSqlDatabase::addDatabase(dbData.type);
myDB.setDatabaseName(dbData.name);
myDB.setHostName(dbData.host);
myDB.setUserName(dbData.user);
myDB.setPassword(dbData.pass);
if(!myDB.open()) {
QMessageBox::critical(this, trUtf8("Внимание!"),
trUtf8("Ошибка подкючения базы данных: \n%1\n\n%2\n").arg(dbData.name)
.arg(myDB.lastError().text()), trUtf8("Ok"));
return false;
}
sysLog(trUtf8("База данных \"%1\" открыта").arg(dbData.name));
return createParentTable();
}

Пишет:
Цитировать
FATAL:  Ident authentication failed for user "ps"
QPSQL: Unable to connect

Причем встроенным монитором вхожу без проблем:
Цитировать
ps@linux-2iht:~> psql tstdb
psql (9.0.3)
Type "help" for help.

tstdb=>

Теперь если из приложения попытаться переподключится к базе
(после смены имени...)
Код:
void MW::reconnectDataBase()
{
if(myDB.isOpen()) myDB.close();
QApplication::beep();
sleep(1);
connectDataBase();
sleep(1);
// refreshTreeAddr();
// readDataUO();
}

Еще и на консоль получаю:
Цитировать
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.

Драйвер установлен (указать другой тип БД, ругается что нет драйвера).
Да и другие приложения подключиться не могут. В часности pgaccess.

Вопрос куда рыть?
Почему psql подключается к БД:
Цитировать
тип - QPSQL
имя БД - tstdb
хост - localhost
имя и пароль юзера по умолчанию владельца БД


а из приложения при тех же параметрах входа - ошибка идентификации.
Брандмауэр отключен на время.

Qt шный драйвер?
Может кто встречался с подобным

Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Март 24, 2011, 14:10 »

По мне проблема с тем, что прав на удаленное соединение нет. Можно быстренько проверить, наваяв скрипт на php или python.

А смотреть нужно на файлик /etc/postgresql/8.3/main/pg_hba.conf

Цитировать
#
# Database administrative login by UNIX sockets
local   all         postgres                          ident sameuser

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               ident sameuser
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5

в нем видно будет, какая авторизация для коннектов по сети. Сравните файлики в 8 и 9 версии.

PS: сам еще 9 не щупал
Записан
FalconHAM
Гость
« Ответ #2 : Март 24, 2011, 15:05 »


Вот последние строки из pg_hda.conf

Цитировать
# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
В 8.4 один в один.
« Последнее редактирование: Март 24, 2011, 16:04 от FalconHAM » Записан
FalconHAM
Гость
« Ответ #3 : Март 24, 2011, 21:37 »

Нда!
Оказалось все проще и сложней  Подмигивающий
 Я пытался поставить БД командой initdb в каталог /usr/pgsql/
Установка проходила успешно.
После чего я на всякий, перезапускал службу postgresql где между остановом и запуском
оказывается проходила инициализация другой БД в каталог /var/lib/pgsql/ владелцем
которой был ессно postgres.
Далее я запускал pg_ctl -D /usr/pgsql start и монитором psql от имени postgres
(перед этим initb я запускал с ключом -U postgres), создавал новую БД с овнером
на свое имя. После монитором входил от своего имени в БД которая в /usr и кажется все ОК.
Но когда я подключался с из приложения... эта... почему то пыталась подключить меня к той БД
которую создала сама, где хозяином был postgres
Пришлось удалить весь /var/lib/pgsql/data/, создать на это место свою БД (initdb
без ключа -U. Затем запустить postmaster, указав ему этот путь.   
Ну сейчас все работает, но только теперь я в базе являюсь суперюзером  Шокированный
оба темплэтйа созданы мной и мне там все дозволено  В замешательстве

Надо будет задать вопрос на постгришном сайте.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 23.