问题很简单。如何将列添加x到表中y,但仅当x列不存在时?我在这里找到了唯一的解决方案,如何检查列是否存在。
x
y
SELECT column_name FROM information_schema.columns WHERE table_name='x' and column_name='y';
这是使用“DO”语句的简短版本:
DO $$ BEGIN BEGIN ALTER TABLE <table_name> ADD COLUMN <column_name> <column_type>; EXCEPTION WHEN duplicate_column THEN RAISE NOTICE 'column <column_name> already exists in <table_name>.'; END; END; $$
您不能将这些作为参数传递,您需要在客户端的字符串中进行变量替换,但这是一个自包含查询,仅在列已存在时发出消息,如果不存在则添加,并且将继续因其他错误(如无效数据类型)而失败。
如果这些方法是来自外部来源的随机字符串,我不建议使用任何这些方法。无论您使用什么方法(作为查询执行的客户端或服务器端动态字符串),这都会导致灾难,因为它会使您面临 SQL 注入攻击。