首页 > 解决方案 > 将查询结果用于 SELECT 列表

问题描述

我想选择一个表的所有列,除了一个。

我的第一步是遵循此答案中给出的示例。有这样的东西:

 SELECT string_agg(quote_ident(attname), ', ' ORDER BY attnum)
 FROM pg_attribute
 WHERE attrelid = 'public.my_table'::regclass
   AND NOT attisdropped
   AND attnum > 0
   AND attname <> 'bad_column'

正如预期的那样,这会产生一个字符串。但现在我想用它来查询我的表的行。如果我们从上面调用结果subset_columns,那么我想进行查询:

SELECT subset_columns
FROM my_table
LIMIT 10;

但我不确定如何生成这个subset_columns变量,如果这种查询方式在 postgresql 中是否可行?

标签: postgresql

解决方案


PostgreSQL 中没有这样的功能。您只能在 pl/PgSQL(或其他 pl/*)中执行此操作,但不能在普通 SQL 中执行此操作,并且仅当您想将值存储在临时表上时。您将在下面找到如何创建变量 pl/PgSQL:

WITH 子集列作为 (
      SELECT string_agg(quote_ident(attname), ', ' ORDER BY attnum)
       FROM pg_attribute
       WHERE attrelid = 'public.my_table'::regclass
       并且没有参加
       AND attnum > 0
       AND attname <> 'bad_column'
)

我建议您创建一个视图而不是变量,然后选择所有所需的列,除了您不想导出的列。因此,您可以随时重复使用它。


推荐阅读