我试图创建其名称存储在现有的表我的Postgres数据库一个新的模式,我的查询是这样的:使用存储的名称CREATE SCHEMA
CREATE SCHEMA (SELECT name FROM table)
但我得到一个语法错误。我究竟做错了什么?这是创建新模式的有效方法吗?这个问题有哪些其他解决方案?
我试图创建其名称存储在现有的表我的Postgres数据库一个新的模式,我的查询是这样的:使用存储的名称CREATE SCHEMA
CREATE SCHEMA (SELECT name FROM table)
但我得到一个语法错误。我究竟做错了什么?这是创建新模式的有效方法吗?这个问题有哪些其他解决方案?
这是不可能的,创建模式语法需要一个有效的模式名称(即有效的模式名称字符串)。在你的情况下,它会抛出异常,因为
********** Error **********
ERROR: syntax error at or near "("
SQL state: 42601
Character: 15
您可以使用动态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;
$$
@ErwinBrandstetter:用于固定的语法错误(太多甲骨文最近...) – 2013-03-21 17:21:49
我猜这样的感谢。 :) – 2013-03-21 17:44:21
殇听到,还是要谢谢你。 – xiidarkevil 2013-03-21 14:37:41
动态SQL是可能的。 – 2013-03-21 15:56:43
@xiidarkevil:这个答案不是很有帮助。你应该接受a_horse的答案。 – 2013-03-21 22:08:28