繁体   English   中英

如何避免在postgreSQL中使用双引号到列名?

[英]How to avoid double quotes to column name in postgreSQL?

我是PostgreSQL的新手。 当我将数据库从MySql迁移到PostgreSQL时,我在执行查询(未找到列)时遇到了问题。

即,在MySQL中,我在表名提供者上有一个列名是authType。 在迁移数据库时,由于混合大小写字母,我的PostgreSQL中的列创建类似于“AuthType”(带引号)。 当我运行像“从提供程序中选择authType”这样的选择查询时,它在MySQL中工作正常,但它不适用于PostgreSQL。

如何在执行查询之前避免引用该列。 我还有100个表,每个表都有一些带有大小写字母的列。

您可以在创建表格后将所有列批量转换为小写。 此函数执行此操作,将模式名称作为输入:

CREATE FUNCTION lower_case_columns(_schemaname text) RETURNS void AS
$$
DECLARE
  colname text;
  tablename text;
  sql text;
BEGIN
  FOR tablename,colname in select table_name,column_name FROM information_schema.columns 
    WHERE table_schema=_schemaname AND column_name<>lower(column_name)
  LOOP
    sql:=format('ALTER TABLE %I.%I RENAME COLUMN %I TO %I',
       _schemaname,
       tablename,
       colname,
       lower(colname));
    raise notice '%', sql;
    execute sql;
  END LOOP;
END;
$$ LANGUAGE plpgsql;

因此,在公共模式中使用此表provider("AuthType" int) ,运行select lower_case_columns('public') ,这将成为

 provider(authtype int)

并且可以使用select authType from provider查询,也可以select authType from provider select authtype from provider或任何不带双引号的案例变体中select authtype from provider

创建表时,您需要避免混合情况(或双引号)。 如果它在表的定义中全部小写,则可以使用不带引号的混合大小写标识符,Postgres将在内部静默地小写它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM