我正在努力使用postgres和异步任务队列
我正在尝试创建一个新表 - 无论工作者首先达到这一点 - 创建表
使用法规
create table if not exists
'表已存在'异常提升
这真的很奇怪,因为当这样做时,单个工作人员 - 即试图同步创建表两次,第二次写一个通知(不是例外)
答案 0 :(得分:2)
不是答案,仅仅是关于如何复制的信息,所以请耐心等待。
打开两个终端,例如tty1
和tty2
,在每个终端中打开psql
。
<强> tty1
强>:
nd@postgres=# begin;
BEGIN
*nd@postgres=# create table if not exists foo();
CREATE TABLE
*nd@postgres=#
<强> tty2
强>:
nd@postgres=# begin;
BEGIN
*nd@postgres=# create table if not exists foo();
(等待锁定)
<强> tty1
强>:
*nd@postgres=# commit;
COMMIT
<强> tty2
强>:
ERROR: duplicate key value violates unique constraint "pg_type_typname_nsp_index"
DETAIL: Key (typname, typnamespace)=(foo, 16386) already exists.
!nd@postgres=#
在这种情况下,不确定PostgreSQL应该更聪明。 IMO应用程序逻辑有问题...