我正在尝试为我拥有的PostgreSQL数据库创建一组函数,我正面临着这个问题。我要做的是创建一个函数,该函数将用户想要更改的列的名称作为参数,以及他们希望插入的新值。
我认为最简单的方法是在内部创建查询作为字符串并执行它们(sql注入现在不用担心)。 搜索了一下,我尝试使用EXECUTE命令,但没有成功。无论是否使用SET,我尝试的查询的任何排列都不起作用,甚至超级简单的查询也会在函数代码或pgadmin sql编辑器中显示语法错误:
EXECUTE "SELECT * FROM user_data.users;";
ERROR: prepared statement "SELECT * FROM user_data.users;" does not exist
********** Error **********
ERROR: prepared statement "SELECT * FROM user_data.users;" does not exist
SQL state: 26000
有任何解决此问题的建议吗?
答案 0 :(得分:0)
要更改列名,您可以使用这样的函数。
它采用表名,列名和新列名。
CREATE OR REPLACE FUNCTION foo(_t regclass, _ocn text, _ncn text)
RETURNS void AS
$func$
BEGIN
EXECUTE 'ALTER TABLE '|| _t ||'
RENAME COLUMN '|| quote_ident(_ocn) ||' TO '|| quote_ident(_ncn) ||'';
END
$func$ LANGUAGE plpgsql;
更改类型是一项工作,可能会增加服务器开销。
让我们以此表为例
CREATE TABLE foobar (id serial primary key, name text);
在许多情况下,用户无需了解详细信息 类型转换机制。但是,由隐式转换完成 PostgreSQL可以影响查询的结果。必要时,这些 可以使用显式类型转换来定制结果。
首先,我们必须从信息The Information Schema Ref postgresql 9.4
中获取列数据类型select data_type from information_schema.columns where table_name = 'foobar' and column_name = 'name';
我们可以投射type conversion::Table 8-1. Data Types Ref Postgresql 9.4
中提到的类型ALTER TABLE foobar ALTER COLUMN name TYPE varchar(20)USING name :: text;
我希望这会有所帮助