libpq

    使用libpq的前端程序必须包括头文件libpq-fe.h并且必须与libpq库链接。

    开发流程

    1. 解压相应的发布包(如openGauss-*.*.0-***-64bit-Libpq.tar.gz)文件,其中include文件夹下的头文件为所需的头文件,lib文件夹中为所需的libpq库文件。

    2. 包含libpq-fe.h头文件:

    3. 如果要使用制作文件(makefile),向CPPFLAGS、LDFLAGS、LIBS变量中增加如下选项:

      1. CPPFLAGS += -I (头文件所在目录)
      2. LDFLAGS += -L (libpq库所在目录)
      3. LIBS += -lpq

    创建表

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <libpq-fe.h>
    4. static void
    5. exit_nicely(PGconn *conn)
    6. {
    7. PQfinish(conn);
    8. exit(1);
    9. }
    10. int
    11. main(int argc, char **argv)
    12. {
    13. const char *conninfo;
    14. PGconn *conn;
    15. PGresult *res;
    16. int nFields;
    17. int i,j;
    18. if (argc > 1)
    19. conninfo = argv[1];
    20. else
    21. conninfo = "dbname=postgres port=42121 host='10.44.133.171' application_name=test connect_timeout=5 sslmode=allow user='test' password='test_1234'";
    22. conn = PQconnectdb(conninfo);
    23. if (PQstatus(conn) != CONNECTION_OK)
    24. {
    25. fprintf(stderr, "Connection to database failed: %s",
    26. PQerrorMessage(conn));
    27. exit_nicely(conn);
    28. }
    29. res = PQexec(conn, "CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32))");
    30. if (PQresultStatus(res) != PGRES_COMMAND_OK)
    31. {
    32. fprintf(stderr, "CREATE command failed: %s", PQerrorMessage(conn));
    33. PQclear(res);
    34. exit_nicely(conn);
    35. }
    36. /* 关闭数据库连接并清理 */
    37. PQfinish(conn);
    38. return 0;
    39. }
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <libpq-fe.h>
    4. static void
    5. exit_nicely(PGconn *conn)
    6. {
    7. PQfinish(conn);
    8. exit(1);
    9. }
    10. int
    11. {
    12. const char *conninfo;
    13. PGconn *conn;
    14. PGresult *res;
    15. if (argc > 1)
    16. conninfo = argv[1];
    17. else
    18. conninfo = "dbname=postgres port=42121 host='10.44.133.171' application_name=test connect_timeout=5 sslmode=allow user='test' password='test_1234'";
    19. conn = PQconnectdb(conninfo);
    20. if (PQstatus(conn) != CONNECTION_OK)
    21. {
    22. fprintf(stderr, "Connection to database failed: %s",
    23. PQerrorMessage(conn));
    24. exit_nicely(conn);
    25. }
    26. res = PQexec(conn, "insert into customer_t1 values(25,'li')");
    27. if (PQresultStatus(res) != PGRES_COMMAND_OK)
    28. {
    29. fprintf(stderr, "INSERT command failed: %s", PQerrorMessage(conn));
    30. PQclear(res);
    31. exit_nicely(conn);
    32. }
    33. /* 关闭数据库连接并清理 */
    34. PQfinish(conn);
    35. return 0;
    36. }

    SELECT操作

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <libpq-fe.h>
    4. static void
    5. exit_nicely(PGconn *conn)
    6. {
    7. PQfinish(conn);
    8. exit(1);
    9. }
    10. int
    11. main(int argc, char **argv)
    12. {
    13. const char *conninfo;
    14. PGconn *conn;
    15. PGresult *res;
    16. int nFields;
    17. int i,j;
    18. if (argc > 1)
    19. conninfo = argv[1];
    20. else
    21. conninfo = "dbname=postgres port=42121 host='10.44.133.171' application_name=test connect_timeout=5 sslmode=allow user='test' password='test_1234'";
    22. if (PQstatus(conn) != CONNECTION_OK)
    23. {
    24. fprintf(stderr, "Connection to database failed: %s",
    25. exit_nicely(conn);
    26. }
    27. res = PQexec(conn, "update customer_t1 set c_customer_sk = 1000 where c_customer_name = 'li'");
    28. if (PQresultStatus(res) != PGRES_COMMAND_OK)
    29. {
    30. fprintf(stderr, "UPDATE command failed: %s", PQerrorMessage(conn));
    31. PQclear(res);
    32. exit_nicely(conn);
    33. }
    34. /* 关闭数据库连接并清理 */
    35. PQfinish(conn);
    36. return 0;
    37. }

    删除操作

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <libpq-fe.h>
    4. static void
    5. exit_nicely(PGconn *conn)
    6. {
    7. PQfinish(conn);
    8. exit(1);
    9. }
    10. int
    11. main(int argc, char **argv)
    12. {
    13. const char *conninfo;
    14. PGconn *conn;
    15. PGresult *res;
    16. int nFields;
    17. int i,j;
    18. if (argc > 1)
    19. conninfo = argv[1];
    20. else
    21. conninfo = "dbname=postgres port=42121 host='10.44.133.171' application_name=test connect_timeout=5 sslmode=allow user='test' password='test_1234'";
    22. conn = PQconnectdb(conninfo);
    23. if (PQstatus(conn) != CONNECTION_OK)
    24. {
    25. fprintf(stderr, "Connection to database failed: %s",
    26. PQerrorMessage(conn));
    27. exit_nicely(conn);
    28. }
    29. res = PQexec(conn, "delete from customer_t1 where c_customer_name = 'li");
    30. if (PQresultStatus(res) != PGRES_COMMAND_OK)
    31. {
    32. fprintf(stderr, "DELETE command failed: %s", PQerrorMessage(conn));
    33. PQclear(res);
    34. exit_nicely(conn);
    35. }
    36. /* 关闭数据库连接并清理 */
    37. PQfinish(conn);