从MySQL迁移到PostgreSQL时的过程/功能的变化
#postgres #mysql #迁移 #procedures

所以,我列出了在MySQL中迁移我们的过程或功能到PostgreSql的一些更改。

  • (double Quote)在Postgresql中不表示文本,而是用来命名列,表等的情况敏感名称。因为这些在PostgreSQL中不敏感。而是用于文本。 例如。
select age from table1 where name = 'harry'; ( postgresql )
select age from table1 where name = "harry"; ( mysql )
  • 常见的JSON从MySQL变为PostgreSQL包括: json_length mysql = json_array_length 使用:: JSON将文本变量转换为JSON JSON_EXTRACT = - >>操作员 json_unquote = trim(从ABC出发) 我们在PostgreSQL中也有JSON数据类型
  • 如果我们在\ n,\ t等字符串中使用逃生字符。
E'\t hello \n World'
  • find_in_set(值,数组)被替换为
value = ANY(string_to_array(array, ',')::BIGINT[])
  • 插入忽略被冲突所取代。我们还可以在()冲突后分别指定唯一的列,但不包括所有唯一约束。同样,在重复的关键更新上,由“冲突” DO更新集进行了处理。排除了插入新行的点。
insert into t1(s1,s2)
select a,b from t2
on conflict do nothing;

insert into t1(s1,s2)
select a,b from t2
on conflict (any unique columns/columns ) do update set
   s1 = EXCLUDED.a,
   s2 = EXCLUDED.b;
  • 在mySQL光标中,我们声明了继续使用变量的继续处理程序,并且有条件,如果变量等于1,我们将循环

    但是在PostgreSQL中,两者都不支持,唯一的更改是在找不到光标后未找到语句。

  • 光标中的循环可以在postgresql中具有名称

  • inst in low_count替换的und_rows()。

get diagnostics count = ROW_COUNT;
concat('Inserted records are ', count) into var_output;
  • 对于例外 - 声明处理程序在PostgreSQL中不支持,但可以使用
declare
begin
    statements;
exception
    when condition [or condition...] then
       handle_exception;
   [when condition [or condition...] then
       handle_exception;]
   [when others then
       handle_other_exceptions;
   ]
end;
  • 在删除语句中,我们只能从源表中删除(除非将级联删除应用于子表上)。另外,第一个加入桌子后加入关键字,用使用。源表的联接列需要在Whewher子句中指定。 为我
delete from abc 
using def
join efg on def.name = efg.name
where abc.id = def.objectid and abc.col1 = efg.col1;
  • 在MySQL中未提供PostgreSQL中的枚举支持。所有枚举列应声明为文本或Varchar。

  • 在更新语句中,我们只能更新源表,因为PostgreSQL中删除了列的表前缀。另外,第一个加入桌子后加入关键字,替换为“来自”。源表的联接列需要在Whewher子句中指定。 set子句是从子句开始之前。对于例如

update abc a
set 
  col1 = o.name
  col2 = w.type
from def o
join fgh w on o.col3 = w.col3
where 
  a.addressid = o.id
and a.contactid = w.id;
  • instr(字符串,sub_string)被位置(字符串中的sub_string)代替。

  • 创建表而不是null auto_increment使用时,生成的使用始终为身份

  • 在PostgreSQL中创建表时无法创建索引,需要在新的SQL语句中明确创建索引。另外,无法在col(255)

  • 之类的可变长度上创建索引
  • Drove临时表被置于下降表。适用于两种类型。

  • group_concat = string_agg(string, - separatorâ)

  • 在信息_schema.columns中,column_type替换为data_type

  • 使用唯一索引创建唯一的约束。因此,首先需要索引来创建约束。

  • curdate()被Current_date

  • 替换
  • date_add()被date_var +任何东西替换。 [如果有整数,则添加天数,如果有间隔1周,则添加1周的时间]