首页 > 解决方案 > 在 postgresql 中无法检查表是否存在

问题描述

我正在编写一个连接到 postgreql db 的 C 程序。我正在尝试检查一个表:

PGresult  *re=PQexec(connection, "SELECT to_regclass('fp_stores_data')");

这个变量是一个全局变量。但是当我编译代码时会发生此错误:

db.c:6:20: error: initializer element is not constant
6 | PGresult const *re=PQexec(connection, "SELECT to_regclass('fp_stores_data')");

标签: sqlcdatabasepostgresqllibpq

解决方案


如果这是一个全局变量,C 要求用编译时已知的东西对其进行初始化;如果它需要调用PQexec(),这是一个运行时的事情并且不允许(正如你的编译器告诉你的那样)。

如果变量需要保持全局,最好将re变量初始化为 NULL,并PQexec()在数据库连接建立后将实际调用/赋值移动到运行时代码中。

非数据库示例:您不能使用运行时调用初始化任何静态变量,因此:

FILE *infile = fopen("myfile.txt", "r");  // NO

int main()
{
    infile = fopen("myfile.txt", "r");    // YES
    ...

变量可以是静态的;它只是必须在运行时进行的分配。

或者,如果变量是local,则可以使用运行时调用对其进行初始化。


推荐阅读