sql - 在 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')");
解决方案
如果这是一个全局变量,C 要求用编译时已知的东西对其进行初始化;如果它需要调用PQexec()
,这是一个运行时的事情并且不允许(正如你的编译器告诉你的那样)。
如果变量需要保持全局,最好将re
变量初始化为 NULL,并PQexec()
在数据库连接建立后将实际调用/赋值移动到运行时代码中。
非数据库示例:您不能使用运行时调用初始化任何静态变量,因此:
FILE *infile = fopen("myfile.txt", "r"); // NO
int main()
{
infile = fopen("myfile.txt", "r"); // YES
...
变量可以是静态的;它只是必须在运行时进行的分配。
或者,如果变量是local,则可以使用运行时调用对其进行初始化。
推荐阅读
- python-3.7 - 在python中将字节对象转换为int类型
- python - 何时使用 dynamodb.client、dynamodb.resource 和 dynamodb.Table?
- vb.net - Visual Studio:System.InvalidCastException:“从字符串“”到类型“整数”的转换无效。
- php - 如何显示索引和多维数组中的值?
- r - 在R中转换整数并计算平均值但仍然不起作用
- javascript - Android webview 不会在移动应用中加载 URL
- html - 如何将 Twitter Bootstrap 下拉菜单移动到屏幕中间
- angular - 如何将 ng-class 用于按钮数组,以便为每个按钮提供单独的条件
- reactjs - 无法通过 API Gateway 访问 DynamoDB
- python - Python:错误地说“
“?