我有下表,名为商店:
store_id INT
emails VARCHAR
Run Code Online (Sandbox Code Playgroud)
其中包含值:
商店ID | 电子邮件 |
---|---|
1 | user_1@example.com,user2@example.com |
2 | uswe3@example.com,user4@example.com |
4 | admin@example.com |
我想生成以下集合:
商店ID | 电子邮件 |
---|---|
1 | user_1@example.com |
1 | user2@example.com |
2 | uswe3@example.com |
2 | user4@example.com |
4 | admin@example.com |
正如您所看到的,我想将电子邮件字段拆分为仅包含一个电子邮件地址的单独记录。你知道我该怎么做吗?
到目前为止,我成功创建了以下查询:
select store_id,string_to_array(emails,',') from stores
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将其拆分string_to_array
为自己的行。
最近我NOLOCK
在 SQL Server 中搜索了选项。我发现当事务在表上处于活动状态时,SQL Server 甚至不允许从特定表中读取,直到事务提交或回滚(据我了解,何时应该使用“with ( nolock)” )。
同时,其他 RDBMS(例如 PostgreSQL)允许您从具有活动写入事务的行读取值。他们只会给你写之前的价值观。特别是这似乎是 PostgreSQL MVCC 的行为(正如我从第 13 章的介绍中了解到的。并发控制)。
我有这个迫切的问题。为什么在 SQL Server 中存在死锁的可能性,而在其他 RDBMS 中,您只是在写入新值之前获得旧值?
注意:我问是因为我可能理解错误。
我正在尝试使用 usermap 对某些用户进行对等身份验证。我想要做的是映射用户邮件阅读器,如您所见:
postgres=# \du
List of roles
Role name | Attributes | Member of
------------+------------------------------------------------+-----------
mailreader | | {}
postgres | Superuser, Create role, Create DB, Replication | {}
Run Code Online (Sandbox Code Playgroud)
进入系统的用户root,dovecot,postfix。因此,我编辑了我的pg_ident.conf
并放置了以下内容:
mailmap dovecot mailreader
mailmap postfix mailreader
mailmap root mailreader
Run Code Online (Sandbox Code Playgroud)
我还编辑pg_hba.conf
并附加了以下内容:
local mail all peer map=mailmap
Run Code Online (Sandbox Code Playgroud)
当我尝试通过sudo psql -U mailreader -d mail
命令连接时,我得到:
psql:致命:用户“mailreader”的对等身份验证失败
错误。
我还尝试了以下配置:
local mail all ident map=mailmap
Run Code Online (Sandbox Code Playgroud)
没有任何进展。
我可以帮忙吗?
有关错误的日志是:
2017-06-27 19:10:10 UTC [1188-1] mailreader@mail LOG: provided user name …
Run Code Online (Sandbox Code Playgroud) 在 aws RDS 上的 postgresql 主从复制方案上的复制服务器中,我收到以下错误:
SQLSTATE[40001]: Serialization failure: 7 ERROR: canceling statement due to conflict with recovery
Run Code Online (Sandbox Code Playgroud)
据我了解,原因是复制的发生类似于数据库迁移。查询序列被写入称为 WAL 的内容,然后以 FIFO 序列执行。
另外,我了解到,一旦在执行 wal 时执行查询,可能会导致冲突,因为有时当前正在执行的查询可能会导致获取陈旧数据。
因此,根据文档,存在延迟,允许首先执行当前查询,然后应用 wal 更改。这些是:
max_standby_archive_delay
max_standby_streaming_delay
但是在繁重的查询(查询执行时间> 30秒)上将这些值设置为-1会导致副本在较长时间内拥有过时的数据吗?
postgresql ×3
amazon-rds ×1
concurrency ×1
nolock ×1
replication ×1
sql-server ×1
transaction ×1