问题很简单.如何将x列添加到表y中,但仅当x列不存在时?我找到了唯一的解决方案here如何判断列是否存在.

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注入攻击.

Postgresql相关问答推荐

分区可以用于postgres中的同类查询吗?

Org.postgresql.util.PSQLException:错误:函数LOWER(BYTEA)不存在

可以向判断枚举值的SQL列添加约束吗?

如何准确确定边界附近的点和地理的 ST_Intersects(ST_Intersects geography vs. Geometry diffrepancy)

返回行值和行计数的总和

如何在 postgres 中查询键设置为空值的 jsonb 字段

如何在 MockDataProvider 中创建自定义 JOOQ 记录?

PostgreSQL - 如何获得前一个月和一周的价值?

Rails:安装 pg gem 时出错

OpenShift:如何从我的 PC 连接到 postgresql

在 postgres 中删除所有共享相同前缀的表

无法登录 PostgreSQL 数据库

判断值是否存在于列中

为 Django Postgres 连接强制 SSL

使用 pg_dump 和 psql -U postgres db_name < ... 移动数据库会导致ERROR: relation "table_name" does not exist

Postgres:为 CAST 失败定义一个默认值?

PostgreSQL 中是否有类似 zip() 函数的东西,它结合了两个数组?

PostgreSQL - 作为表名的动态值

在 OS X 上使用 Postgres.app 时如何将 psql 放在路径上?

postgresql NOT ILIKE 子句不包含空字符串值