我寻找一种简单的方法来选择除 psql 中的一列之外的所有列。
随着psql我的意思是交互式命令行。
我会很高兴有一个工具可以扩展到*引用的列名列表。然后我可以移除列以手动移除。
我的问题只是关于 psql 的交互使用。它不是那些对 sql 标准不满意并且想要执行诸如“select *-foo”之类的问题的人的问题的重复。
要获取默认顺序的列列表,不包含错误列:
SELECT string_agg(quote_ident(attname), ', ' ORDER BY attnum)
FROM pg_attribute
WHERE attrelid = 'myschema.mytable'::regclass
AND NOT attisdropped -- no dropped (dead) columns
AND attnum > 0 -- no system columns
AND attname <> 'bad_column' -- case sensitive!
Run Code Online (Sandbox Code Playgroud)
或者只是WHERE attrelid = 'mytable'::regclass如果您信任搜索路径可以解析到正确的架构。
quote_ident()必要时添加双引号。
我在 2007 年在 pgsql-general 上问过同样的问题。那时是 Postgres 8.2。甜蜜的回忆 ...
有关的: