Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PostgreSQL > Как узнать наличие таблицы в базе


Автор: wallstreet 7.4.2015, 16:35
Добрый день.
Я создаю таблицы программно из своего приложения
Код

sprintf(chQuery, "select myschema.create_table('%s');", pair);
res = PQexec(conn, strQuery);

Если таблицы с подобным названием нет, база возвращает 2 (подозреваю это означает PGRES_TUPLES_OK)
Код

if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
    return false;
}

однако если такая таблица уже имеется, то возвращает 7 (подозреваю это PGRES_FATAL_ERROR).
Могу конечно ошибаться в толковании возвращаемых значений, тогда поправьте.
Однако если это так, то возникает вопрос, если база вернула PGRES_FATAL_ERROR как понять, что это означает наличие таблицы в базе, которую пытаюсь создать? Ведь эта ошибка может появляться и в других случаях, например, если я сформировал запрос c нарушением синтаксиса.
Если подытожить, то как можно узнать что таблица с таким именем уже присутствует в базе ?

Автор: Zloxa 7.4.2015, 17:13
Цитата(wallstreet @  7.4.2015,  17:35 Найти цитируемый пост)
как можно узнать что таблица с таким именем уже присутствует в базе ?


http://www.postgresql.org/docs/8.1/static/infoschema-tables.html view

Цитата(wallstreet @  7.4.2015,  17:35 Найти цитируемый пост)
Я создаю таблицы программно из своего приложения

Лишь в частных случаях это не есть признак плохого дизайна .

Автор: wallstreet 7.4.2015, 17:38
Цитата(Zloxa @  7.4.2015,  17:13 Найти цитируемый пост)
Лишь в частных случаях это не есть признак плохого дизайна .

Таблицы создаются в зависимости от тех данных с которыми пользователь изволил работать выбрав соответствующие настройки конфигураций работы приложения. Создаются приблизительно один раз в квартал, потом они в любом случае будут неактуальны. Постоянные таблицы же созданы заранее.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)