2013-03-21 48 views
0

我试图创建其名称存储在现有的表我的Postgres数据库一个新的模式,我的查询是这样的:使用存储的名称CREATE SCHEMA

CREATE SCHEMA (SELECT name FROM table) 

但我得到一个语法错误。我究竟做错了什么?这是创建新模式的有效方法吗?这个问题有哪些其他解决方案?

回答

-1

这是不可能的,创建模式语法需要一个有效的模式名称(即有效的模式名称字符串)。在你的情况下,它会抛出异常,因为

********** Error ********** 

ERROR: syntax error at or near "(" 
SQL state: 42601 
Character: 15 
+0

殇听到,还是要谢谢你。 – xiidarkevil 2013-03-21 14:37:41

+0

动态SQL是可能的。 – 2013-03-21 15:56:43

+0

@xiidarkevil:这个答案不是很有帮助。你应该接受a_horse的答案。 – 2013-03-21 22:08:28

1

您可以使用动态SQL做到这一点:

do 
$$ 
    declare s_name text; 
begin 
    -- make sure there is exactly one row in that table! 
    -- otherwise you need some where condition or an aggregat to ensure that. 
    SELECT name INTO s_name FROM some_table; 
    execute 'create schema '|| quote_ident(s_name); 
end; 
$$ 
+0

@ErwinBrandstetter:用于固定的语法错误(太多甲骨文最近...) – 2013-03-21 17:21:49

+0

我猜这样的感谢。 :) – 2013-03-21 17:44:21

相关问题