选择列使用下面的代码,我可以选择分享一些列相同的前缀(或者upreg_srt或downreg_srt)从我的表和删除(删除)它们:具有相同前缀
DO
$do$
DECLARE
_column TEXT;
BEGIN
FOR _column IN
SELECT DISTINCT quote_ident(column_name)
FROM information_schema.columns
WHERE table_name = 'all_se_13patients_downreg_ranks'
AND column_name LIKE '%upreg_srt' OR column_name LIKE '%downreg_srt'
AND table_schema NOT LIKE 'pg_%'
order by quote_ident
LOOP
RAISE NOTICE '%',
-- EXECUTE
'ALTER TABLE all_se_13patients_downreg_ranks DROP COLUMN ' || _column;
END LOOP;
END
$do$
此代码工作在Postgres下很好。 (当然,首先需要注意--EXECUTE
行!) 是否有一种方法可以利用/更改此代码(或使用不同的脚本),以便将所选列(具有共享前缀的列)实际保存到子表中?伪代码:
select [my chosen columns]
into myNewTbl
from myOriginalTbl
我能够运行下面的代码:
DO
$do$
DECLARE
qry TEXT;
BEGIN
SELECT 'SELECT id_13,' || substr(cols,2,length(cols)-2) ||
' FROM all_se_13patients_downreg_ranks' INTO qry
FROM (
SELECT array(
SELECT DISTINCT quote_ident(column_name::text)
FROM information_schema.columns
WHERE table_name = 'all_se_13patients_downreg_ranks'
AND column_name LIKE '%downreg_srt'
order by quote_ident
)::text cols
-- CAST text so we can just strip off {}s and have column list
) sub;
--EXECUTE qry;
RAISE NOTICE '%',qry;
END
$do$
它可以很好地 - 但我不能使用EXECUTE qry
行出于某种原因。 如果我尝试RAISE NOTICE '%',qry;
一行,我会得到一个输出 - 这基本上是命令行,我稍后可以在新的查询窗口(!)中复制/粘贴并执行它。因此,我想知道为什么EXECUTE
部件不起作用?
运行的程序与RAISE NOTICE
行我得到:
NOTICE: SELECT id_13,agk_downreg_srt,bvi_downreg_srt,cbk_downreg_srt,dj_downreg_srt,dkj_downreg_srt,flv_downreg_srt,ghw_downreg_srt,gvz_downreg_srt,idy_downreg_srt,prw_downreg_srt,spn_downreg_srt,zgr_downreg_srt,znk_downreg_srt FROM all_se_13patients_downreg_ranks
但是,如果我尝试运行与EXECUTE
一部分的过程,而不是我得到:
Query returned successfully with no result in 51 ms.
所以问题是, postgres无法真正执行命令行。问题是为什么?有没有更好的方式来执行这个过程,所以它实际上执行?
谢谢@Mike Sherrill'猫召回'! - 我试过了: 做 $$ 声明 qry text; table_name text; begin qry:='从information_schema.tables中选择表名,其中table_name如''dkj%'';'; 提出通知'%',qry; 执行qry into table_name; 提出通知'%',table_name; END $$ 实际上我得到: 注意:从information_schema中选择table_name。table_name如'dkj%'; 注意:dkj_p_k4 查询成功返回,14毫秒内没有结果。 很酷。它给了我数据库中共享相同前缀('dkj')的7个表中的第一个。 我可以获得所有这些吗? – Roy
当我试着INSERT语句,像这样: 做 $$ 宣布 qry文本; table_name text; begin qry:='INSERT table_name from information_schema.tables where table_name like''dkj%'';'; 提出通知'%',qry; 执行qry into table_name; 提出通知'%',table_name; END $$ 我收到以下错误消息: – Roy
注意:从information_schema.tables中插入table_name,其中table_name如'dkj%'; 错误:在“table_name”处或附近的语法错误 LINE 1:从information_schema.tables中插入表名...其中表... ^ QUERY:INSERT table_name from information_schema.tables where table_name like'dkj%'; 语境:PL/pgSQL函数inline_code_block第9行,EXECUTE语句 **********错误********** 错误:在“table_name”或其附近的语法错误 SQL状态:42601 上下文:PL/pgSQL函数inline_code_block第9行,EXECUTE语句 – Roy