无法检查 postgresql 中是否存在 table
can not check whether a table exists or not in postgresql
我正在编写一个连接到 postgreql 的 C 程序db.I正在尝试检查 table:
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')");
如果这是一个全局变量,C 要求在编译时用已知的东西初始化它;如果它需要调用 PQexec()
,这是 runtime 的事情并且不允许(正如你的编译器告诉你的那样)。
如果变量需要保持全局,最好将 re
变量初始化为 NULL,并在数据库连接完成后将实际的 PQexec()
call/assignment 移动到运行时代码中已成立。
非数据库示例:您不能使用运行时调用初始化任何静态变量,因此:
FILE *infile = fopen("myfile.txt", "r"); // NO
int main()
{
infile = fopen("myfile.txt", "r"); // YES
...
变量可以是静态的;只有 分配 必须在运行时进行。
或者,如果变量是 local,它可以通过运行时调用来初始化。
我正在编写一个连接到 postgreql 的 C 程序db.I正在尝试检查 table:
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')");
如果这是一个全局变量,C 要求在编译时用已知的东西初始化它;如果它需要调用 PQexec()
,这是 runtime 的事情并且不允许(正如你的编译器告诉你的那样)。
如果变量需要保持全局,最好将 re
变量初始化为 NULL,并在数据库连接完成后将实际的 PQexec()
call/assignment 移动到运行时代码中已成立。
非数据库示例:您不能使用运行时调用初始化任何静态变量,因此:
FILE *infile = fopen("myfile.txt", "r"); // NO
int main()
{
infile = fopen("myfile.txt", "r"); // YES
...
变量可以是静态的;只有 分配 必须在运行时进行。
或者,如果变量是 local,它可以通过运行时调用来初始化。