返回顶部
首页 > 资讯 > 数据库 >postgresql兼容MySQL on update current_timestamp问题怎么解决
  • 658
分享到

postgresql兼容MySQL on update current_timestamp问题怎么解决

2023-07-05 13:07:50 658人浏览 八月长安
摘要

这篇文章主要介绍“postgresql兼容MySQL on update current_timestamp问题怎么解决”,在日常操作中,相信很多人在postgresql兼容Mysql on

这篇文章主要介绍“postgresql兼容MySQL on update current_timestamp问题怎么解决”,在日常操作中,相信很多人在postgresql兼容Mysql on update current_timestamp问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”postgresql兼容mysql on update current_timestamp问题怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    postgresql兼容MySQL on update current_timestamp

    问题描述

    PostgreSQL执行Insert语句时,自动填入时间的功能可以在创建表时实现,但更新表时时间戳不会自动自动更新。

    在mysql中可以在创建表时定义自动更新字段,比如 :

    create table ab (id int,changetimestamp timestampNOT NULLdefault CURRENT_TIMESTAMPon update CURRENT_TIMESTAMP);

    那PostgreSQL中怎么操作呢?

    解决方案

    通过触发器实现,具体如下:

    create or replace function upd_timestamp() returns trigger as$$begin    new.modified = current_timestamp;    return new;end$$language plpgsql;
    drop table if exists ts;create table ts (id bigserial primary key,tradeid integer ,email varchar(50),num integer,modified timestamp default current_timestamp);create trigger t_name before update on ts for each row execute procedure upd_timestamp();

    测试代码:

    insert into ts (tradeid,email,num) values (1223,‘mike_zhang@live.com',1);update ts set email=‘Mike_Zhang@live' where tradeid = 1223 ;create unique index ts_tradeid_idx on ts(tradeid);//insert into ts(tradeid,email,num) values (1223,‘Mike_Zhang@live.com',2) on conflict(tradeid) do update//set email = excluded.email,num=excluded.num;select * from ts;– delete from ts;

    postgresql和mysql常用语法比较

    1、分区表

    mysql和pg中的分区表使用基本类似,同样都支持hash、range、list三种基本的分区类型。两者的区别在于:

    mysql:不支持指定默认分区,最多只支持2级分区,不支持表达式分区。且需要注意,mysql当前除InnoDB或NDB之外的任何存储引擎都不支持分区表这一功能,如MyISAM。

    pg:pg中可以通过default分区名的方式指定默认分区,并且支持多级别的分区,且支持不同种类分区的任意组。pg还支持表达式分区,不过必须得是immutable类型表达式。

    除此之外主要注意的是,无论是pg还是mysql都必须pk、uk中包含分区键,因为两者目前都不支持全局索引

    2、语法

    offset/limit:

    mysql和pg中都支持offset/limit的分页语法,但是两者有一点不同:

    –mysql

    mysql> select * from t1 limit 2,2;+------+------+| id   | ino  |+------+------+|    3 | c    ||    4 | d    |+------+------+2 rows in set (0.00 sec)

    –pg

    pg中不支持上面这种mysql的写法

    bill=# select * from tbl limit 2,2;ERROR:  LIMIT #,# syntax is not supportedLINE 1: select * from tbl limit 2,2;                          ^HINT:  Use separate LIMIT and OFFSET clauses.bill=# select * from tbl limit 2 offset 2; id | c1 |  c2  | c3  |  c4  |   c5    |  c6   | c7 |   c8   |  c9   |  c10  ----+----+------+-----+------+---------+-------+----+--------+-------+-------  3 | 92 | 8207 | 167 | 3031 |  363025 | 66793 | 31 | 108702 |  3358 | 46284  4 | 19 | 6982 | 834 | 4278 | 6929072 | 83949 | 80 |   8206 | 25265 | 59691(2 rows)

    类型转换:

    mysql和pg中都支持cast(expression as target_type)的方法去进行类型转换,但是pg中除此之外还支持value::new_type的方法来进行类型转换。

    bill=# select cast(id as int8) from t1 limit 1; id ----  1(1 row)bill=# select id::int8 from t1 limit 1; id ----  1(1 row)

    upsert/replace:

    pg中的upsert作用是当插入数据时:如果不存在则insert,存在则update。

    语法为:

    INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ]    [ ON CONFLICT [ conflict_target ] conflict_action ]and conflict_action is one of:    DO NOTHING    DO UPDATE SET { column_name = { expression | DEFAULT } |                    ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) |                    ( column_name [, ...] ) = ( sub-SELECT )                  } [, ...]              [ WHERE condition ]

    mysql中使用replace来实现类似的功能。

    语法为:

    REPLACE [LOW_PRIORITY | DELAYED]    [INTO] tbl_name    [PARTITION (partition_name [, partition_name] ...)]    [(col_name [, col_name] ...)]    { {VALUES | VALUE} (value_list) [, (value_list)] ...      |      VALUES row_constructor_list    }

    例子:

    mysql> CREATE TABLE test (    ->   id INT UNSIGNED NOT NULL AUTO_INCREMENT,    ->   data VARCHAR(64) DEFAULT NULL,    ->   ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    ->   PRIMARY KEY (id)    -> );Query OK, 0 rows affected (0.02 sec)mysql> REPLACE INTO test VALUES (1, 'Old', '2014-08-20 18:47:00');Query OK, 1 row affected (0.00 sec)mysql> SELECT * FROM test;+----+------+---------------------+| id | data | ts                  |+----+------+---------------------+|  1 | Old  | 2014-08-20 18:47:00 |+----+------+---------------------+1 row in set (0.00 sec)mysql> REPLACE INTO test VALUES (1, 'New', '2014-08-20 18:47:42');Query OK, 2 rows affected (0.00 sec)mysql> SELECT * FROM test;+----+------+---------------------+| id | data | ts                  |+----+------+---------------------+|  1 | New  | 2014-08-20 18:47:42 |+----+------+---------------------+1 row in set (0.00 sec)

    load data:

    mysql中使用load命令来实现加载数据的功能。

    语法为:

    LOAD DATA    [LOW_PRIORITY | CONCURRENT] [LOCAL]    INFILE 'file_name'    [REPLACE | IGNORE]    INTO TABLE tbl_name    [PARTITION (partition_name [, partition_name] ...)]    [CHARACTER SET charset_name]    [{FIELDS | COLUMNS}        [TERMINATED BY 'string']        [[OPTIONALLY] ENCLOSED BY 'char']        [ESCAPED BY 'char']    ]    [LINES        [STARTING BY 'string']        [TERMINATED BY 'string']    ]    [IGNORE number {LINES | ROWS}]    [(col_name_or_user_var        [, col_name_or_user_var] ...)]    [SET col_name={expr | DEFAULT},        [, col_name={expr | DEFAULT}] ...]

    在pg中我们使用copy命令来实现同样的功能,copy命令分为服务端copy和客户端的copy协议。

    语法为:

    COPY table_name [ ( column_name [, ...] ) ]    FROM { 'filename' | PROGRAM 'command' | STDIN }    [ [ WITH ] ( option [, ...] ) ]    [ WHERE condition ]COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }    TO { 'filename' | PROGRAM 'command' | STDOUT }    [ [ WITH ] ( option [, ...] ) ]

    3、索引

    mysql中索引类型:

    • btree索引;

    • invert索引,即倒排索引,常用来实现多值类型、JSON类型、全文检索等的索引查询;

    • 表达式索引,mysql中的表达式索引不支持spatial和fulltext类型。

    • 空间索引,mysql中不支持空间索引,其实现空间索引的方式是将空间对象转换成geohash编码,然后使用btree索引来实现。

    pg中的索引类型:

    • 支持多种索引类型:btree、hash、gin、GISt、sp-gist、bloom、rum、brin;

    • 还支持exclude索引、表达式索引、partial索引(分区索引);

    • 支持空间索引,是真正的基于rtree的空间索引类型;

    • 且pg开发了多种索引接口,用户可以自定义新的索引。

    4、其它

    约束:

    mysql和pg一样都支持主键约束、外键约束、唯一约束、not null约束等。两者在约束方面的区别在于:

    mysql:check约束不是强制的,即可以创建check约束,但是违反该约束的数据仍然不会报错;exclude排它约束mysql中不支持。

    pg:pg中的check约束是强制的,如果数据不符合check约束则无法插入。并且pg中还支持exclude约束。

    use/desc:

    mysql中use database_name和desc table_name的快捷命令在pg中也有很方便的命令支持,pg中可以使用:\c database_name和\d table_name来代替。

    除此之外,pg和mysql虽然都支持四种事务隔离级别,但是在pg中read uncommitted的隔离级别是不可用的,这也确保了在pg中不会出现脏读的现象。

    另外在mysql中是存在隐式提交的,即在事务中的DDL语句会被自动提交,而在pg中不会。

    例如:

    mysql

    可以发现事务回滚后t2表仍然存在,因为已经自动提交了。

    mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> create table t2(id int);Query OK, 0 rows affected (0.00 sec)mysql> insert into t2 values(222);Query OK, 1 row affected (0.00 sec)mysql> rollback;Query OK, 0 rows affected (0.00 sec)mysql> select * from t2;+------+| id   |+------+|  222 |+------+1 row in set (0.00 sec)

    pg:

    而在pg中却没有,可以被rollback

    bill=# create table tt2(id int);CREATE TABLEbill=# insert into tt2 values(222);INSERT 0 1bill=# rollback ;ROLLBACKbill=# select * from t2;ERROR:  relation "t2" does not exist

    到此,关于“postgresql兼容MySQL on update current_timestamp问题怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    您可能感兴趣的文档:

    --结束END--

    本文标题: postgresql兼容MySQL on update current_timestamp问题怎么解决

    本文链接: https://lsjlt.com/news/352231.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • postgresql兼容MySQL on update current_timestamp问题怎么解决
      这篇文章主要介绍“postgresql兼容MySQL on update current_timestamp问题怎么解决”,在日常操作中,相信很多人在postgresql兼容MySQL on...
      99+
      2023-07-05
    • postgresql兼容MySQL on update current_timestamp问题
      目录PostgreSQL兼容mysql on update current_timestamp问题描述解决方案postgresql和mysql常用语法比较1、分区表2、语法3、索引4、其它总结postgresq...
      99+
      2023-03-20
      postgresql MySQL MySQL on update current_timestamp on update current_timestamp
    • Mysql使用on update current_timestamp问题怎么解决
      本文小编为大家详细介绍“Mysql使用on update current_timestamp问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql使用on update current...
      99+
      2023-07-05
    • Mysql使用on update current_timestamp问题
      目录mysql使用on update current_timestamp注意点先说结论CURRENT_TIMESTAMP()和ON UPDATE及索引相关基本概率代码与实例总结Mysql使用on update curre...
      99+
      2023-03-20
      Mysql current_timestamp on update current_timestamp Mysql timestamp
    • 记一次线上问题 → 对 MySQL 的 ON UPDATE CURRENT_TIMESTAMP 的片面认知
      开心一刻   老婆痛经,躺在沙发上,两岁的女儿看着她问道   女儿:妈妈,你怎么了   老婆:妈妈肚子痛   女儿:哦,妈妈你头疼   老婆:不是头疼,妈妈是肚子疼   女儿用她的不锈钢饭碗砸向老婆的额头,说道:妈妈,你哪里疼   老婆:...
      99+
      2017-07-21
      记一次线上问题 MySQL ON UPDATE CURRENT_TIMESTAMP 的片面认知
    • XHTML+CSS兼容性问题怎么解决
      本篇内容主要讲解“XHTML+CSS兼容性问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“XHTML+CSS兼容性问题怎么解决”吧!解决XHTML+C...
      99+
      2024-04-02
    • win10兼容常见问题怎么解决
      本篇内容介绍了“win10兼容常见问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!win10兼容模式设置的方法首先右键打开需要设置...
      99+
      2023-07-01
    • 怎么解决IE7和IE8兼容性问题
      怎么解决IE7和IE8兼容性问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。IE8会是福音还是又一个光环据称全面兼容标准,今天向大家介绍如何...
      99+
      2024-04-02
    • IE6中怎么解决CSS兼容性问题
      本篇内容主要讲解“IE6中怎么解决CSS兼容性问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“IE6中怎么解决CSS兼容性问题”吧!  IE6中常见CSS兼容...
      99+
      2024-04-02
    • CSS常见兼容性问题怎么解决
      这篇文章主要介绍“CSS常见兼容性问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS常见兼容性问题怎么解决”文章能帮助大家解决问题。   浏览器的兼...
      99+
      2024-04-02
    • postgresql怎么兼容MySQL if函数
      这篇文章主要介绍“postgresql怎么兼容MySQL if函数”,在日常操作中,相信很多人在postgresql怎么兼容MySQL if函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
      99+
      2023-07-05
    • 解决padding ie不兼容问题
      这篇文章主要讲解了“解决padding ie不兼容问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“解决padding ie不兼容问题”吧!通常我们遇到3种...
      99+
      2024-04-02
    • css兼容问题如何解决
      这篇文章主要介绍了css兼容问题如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇css兼容问题如何解决文章都会有所收获,下面我们一起来看看吧。 针对差别的IE浏览器版...
      99+
      2024-04-02
    • Javascript中怎么解决浏览器兼容问题
      今天就跟大家聊聊有关Javascript中怎么解决浏览器兼容问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.自动匹配高度自从我们抛弃了基于Ta...
      99+
      2024-04-02
    • 怎么解决CSS浏览器兼容性问题
      这篇文章主要介绍了怎么解决CSS浏览器兼容性问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么会有浏览器兼容性问题?还不是因为浏览器厂商太多了!Chrome,Frire...
      99+
      2023-06-08
    • IE7.JS怎样解决IE兼容性问题
      这篇文章给大家介绍 IE7.JS怎样解决IE兼容性问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。和大家重点讨论一下如何使用IE7.JS解决IE兼容性问题,IE7.JS是一个用来使老...
      99+
      2024-04-02
    • win10不兼容问题如何解决
      解决Windows 10不兼容问题可以尝试以下方法:1. 更新驱动程序:访问电脑制造商的官方网站或设备制造商的网站,下载并安装最新的...
      99+
      2023-10-09
      win10
    • HTML怎么解决跨浏览器兼容性问题
      这篇文章主要介绍了HTML怎么解决跨浏览器兼容性问题的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇HTML怎么解决跨浏览器兼容性问题文章都会有所收获,下面我们一起来看看吧。 ...
      99+
      2024-04-02
    • 常用CSS浏览器兼容问题怎么解决
      这篇文章主要讲解了“常用CSS浏览器兼容问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“常用CSS浏览器兼容问题怎么解决”吧! 一、最后一排笔墨...
      99+
      2024-04-02
    • Linux怎么修改ELF解决glibc兼容性问题
      本篇文章给大家分享的是有关Linux怎么修改ELF解决glibc兼容性问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Linux glibc 问题相信有不少 Linux 用户...
      99+
      2023-06-28
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作