0

我一直在寻找 STDIN 选项,以与 COPY 类似的方式使用 FOREIGN TABLE ...并在指南中发现一个“错误”:官方 sql-create-foreign-table Guide中没有关于选项的文档。没有链接,什么都没有:

选项(选项“价值”[,...])

与新外部表或其列之一关联的选项。...

因此,由于缺乏信息,这个问题变成了两个:

  1. 可以使用 STDINFOREIGN TABLE吗?

  2. “OPTIONS”文档在哪里?


编辑以添加示例

CREATE FOREIGN TABLE t1 (
   aa text,
   bb bigint
) SERVER files OPTIONS (
   filename '/tmp/bigBigdata.csv',
   format 'csv',
   header 'true'
;

是对使用文件系统的经典丑陋 PostgreSQL 限制,所以我需要一个终端解决方案......想象一下在 shell 上带有管道的东西,如

psql  -c "ALTER FOREIGN TABLE t1 ...  STDIN; CREATE TABLE t2 AS SELECT trim(aa) as aa, bb+1 as bb FROM t WHERE bb>999" < /thePath/bigBigdata.csv 

是一种“不直接复制,只过滤一个数据流”,并从这个过滤后的流中创建一个最终的表 t2。

4

1 回答 1

3

我认为您对外部表感到困惑,我将尝试解释。

  1. 外部表的数据不驻留在 PostgreSQL 中,而是驻留在外部数据源(文件、不同的数据库等)中。

    外部表只是从 PostgreSQL 访问这些数据的一种方式,就好像它们是 PostgreSQL 表一样。

    如果外部数据包装器支持它,您可以COPY使用外部表FROM STDIN,但这与CREATE FOREIGN TABLE. CREATE FOREIGN TABLE定义 PostgreSQL 应该如何定位外部数据以及数据的格式是什么。

  2. 没有关于选项的文档,CREATE FOREIGN TABLE因为它们取决于您使用的外部数据包装器。

    查看外部数据包装器的文档。

您的示例清楚地表明您需要的不是外部表,而是一个临时表,您可以COPY将稍后要修改的原始数据放入其中。您不能file_fdw用于驻留在客户端计算机上的数据。

于 2018-08-11T20:25:32.013 回答