2013-12-12 3 views
0

Я использую программу C, чтобы поговорить с базой данных Postgres.PostgreSQL & C: Как распечатать весь результат PostgreSQL

Я хотел бы создать метод, который позволит пользователю вводить пользовательский запрос в программе C и видеть результаты, напечатанные как Postgres, будет печатать в своем клиенте командной строки psql.

Для других запросов я смог использовать функции, которые я нашел в документации. Беда в том, что эти работы только потому, что я знаю, количество колонок, мне нужно, и соответствующие заголовки и т.д.

Например:

void* executeCustomQuery(const char* query){ 
    PGresult* res = PQexec(conn, query); 
    //print all entries 
    printf(PRODUCTS_TABLE_HEADER); 
    int i; 
    for (i = 0; i < PQntuples(res); i++){ 
     printf("| %s | %s | %s |", PQgetvalue(res, i, 0), PQgetvalue(res, i, 1), PQgetvalue(res, i, 2)); 
    } 
    PQclear(res); 
} 

Я не могу использовать этот код, если я не знаю, что Я возвращаюсь.

Кто-нибудь знает, как распечатать прямые результаты Postgres?

+0

Одна из приятных «функций» Postgres - это бесплатное программное обеспечение с открытым исходным кодом - взгляните на код 'psql'. –

+0

RTFM. Все есть: http://www.postgresql.org/docs/9.2/static/libpq-exec.html#LIBPQ-EXEC-SELECT-INFO –

+2

Я нашел его вскоре после публикации. «RTM» сделал бы это, хотя, не нужно для этого «F» – CodyBugstein

ответ

1

В итоге я нашел метод PQfname(), который дает мне имена столбцов таблицы. Используя это, я могу восстановить таблицу с некоторыми для циклов. Это не совсем то, что я искал, но это стоит публикации.

PGresult* res = PQexec(conn, query); 
    char headerPrint[500]; 
     strcpy(headerPrint, "|"); 
     int h; 
     for (h = 0; h < PQnfields(res); h++){ 
       strcat(headerPrint, " "); 
       strcat(headerPrint, PQfname(res, h)); 
       strcat(headerPrint, " |"); 
       if (h == PQnfields(res)-1){ 
        strcat(headerPrint, "\n"); 
       } 
     } 
     printf("%s", headerPrint); 
     //Print content 
     int i; 
     char resultPrint[500]; 
     strcpy(resultPrint, "|"); 
     for (i = 0; i < PQntuples(res); i++){ 
      int j; 
      for (j = 0; j < PQnfields(res); j++){ 
       strcat(resultPrint, " "); 
       strcat(resultPrint, PQgetvalue(res, i, j)); 
       strcat(resultPrint, " |"); 
       //printf("%s %d %s", "Value of i is: ", i, "\n"); 
       //printf("%s %d %s", "Value of j is: ", j, "\n"); 
       //New line at the end 
       if (j == PQnfields(res)-1){ 
        strcat(resultPrint, "\n"); 
       } 
      } 
      printf("%s", resultPrint); 
      strcpy(resultPrint, "|"); //Clear the current row and start over 
     } 
     PQclear(res); 
+0

Читатели также должны посмотреть на «PQprint». –

Смежные вопросы