postgresql - 如何使用 PL/pgSQL 将静态字符串附加到格式化数组
问题描述
我正在尝试使用 PL/pgSQL 在大量表上创建地理空间索引。每个索引都必须是唯一的,因此我尝试将静态字符串附加到索引名称的每个表名的末尾。这是我尝试过的测试代码:
DO
$do$
DECLARE
m text;
arr text[] := array['E09000001','E09000002'];
BEGIN
FOREACH m IN ARRAY arr
LOOP
EXECUTE format($fmt$
CREATE INDEX %1$L || '_gist_index'
ON %1$I
USING GIST (wkb_geometry);
$fmt$, m);
END LOOP;
END
$do$
我收到以下错误:
ERROR: syntax error at or near "'E09000001'"
LINE 2: CREATE INDEX 'E09000001' || '_gist_index'
任何帮助将不胜感激。
解决方案
您应该在参数中添加后缀:
DO
$do$
DECLARE
m text;
arr text[] := array['E09000001','E09000002'];
BEGIN
FOREACH m IN ARRAY arr
LOOP
EXECUTE format($fmt$
CREATE INDEX %I
ON %I
USING GIST (wkb_geometry);
$fmt$, m || '_gist_index', m);
END LOOP;
END
$do$
推荐阅读
- uwp - StorageFolder.GetFilesAsync() 在 HoloLens 2 (ARM64) 中不起作用
- ios - 使用 scrollViewReader 时 SwiftUI ScrollView 滚动太远
- java - Javafx webview在运行时不显示破折号应用程序
- python - 无法使用列表理解访问分类报告指标
- php - 只有当变量满足特定条件时,有没有办法在 php 中重定向?
- javascript - 为位于 Blazor 子菜单中的 DOM 元素调用 JS 互操作函数
- python - 多处理时打开文件过多错误
- openlayers - 功能很小
- asp.net-mvc - ASP.NET Core 中每个用户的控制器
- python - 遍历 df 行并附加到没有名称和 dtype 的列表