FireDAC 可以访问临时 PostgreSQL 表上的索引吗?

问题描述 投票:0回答:1

我们正在将数据库从 Advantage Database 迁移到 PostgreSQL。我们使用的常见模式之一是这样的:

TRY DROP TABLE #TemporaryTable; CATCH ALL END TRY;
SELECT Field1, Field2
INTO #TemporaryTable
FROM MainTable
WHERE Type=1;

CREATE INDEX FirstIndex ON #TemporaryTable (Field2);

我们设置 TAdsQuery 并发出 ExecSQL。然后我们设置一个 TAdsTable 并打开#TemporaryTable。然后我们可以将 IndexName 设置为“FirstIndex”。如果您愿意,您可以在设计时执行此操作,并且所有索引都显示在 IndexName 下拉列表中。

在 PostgreSQL 下研究此模式时,我们发现索引在 TFDTable 下不可用。这是我们迄今为止实现的模式。

使用 TFDQuery 执行:

DROP TABLE IF EXISTS TemporaryTable;

SELECT Field1, Field2
INTO TEMP TemporaryTable
FROM MainTable
WHERE Type=1;

CREATE INDEX FirstIndex ON TemporaryTable (Field2);

如果我们发出以下 SQL,我们可以看到索引确实存在:

SELECT
    indexname,
    indexdef
FROM
    pg_indexes

但是 TFDTable 无法在设计时或运行时设置它们。

我们当然可以使用 IndexFieldNames,但 UI 的其他部分会根据专门创建的预定义索引列表自行实现。

postgresql delphi firedac
1个回答
0
投票

经过挖掘,我发现 PostgreSQL 将临时表放在集合的唯一架构名称下。

我能够编写一个辅助函数,给定 TFDConnection 对象,该函数将返回连接的当前唯一架构:

select nspname from pg_namespace where oid = pg_my_temp_schema();

只要我将此函数的结果分配给 TFDTable 的 SchemaName 属性,它就可以挂接其他所有内容。

© www.soinside.com 2019 - 2024. All rights reserved.