【问题标题】:Postgres is not returning any data when running Select query运行 Select 查询时 Postgres 不返回任何数据
【发布时间】:2018-08-02 06:04:03
【问题描述】:

我正在运行 Postgres 9.22.2 并尝试运行以下语句:

select * from table limit 100;

当我这样做时,命令就会挂起。 ps 输出表明它是 等待:

postgres lookup [local] COPY  
postgres: lookup exomeSNP [local] SELECT waiting

我有一个 shell 脚本,它会定期从 CSV 复制数据。

以下是 pg_stat_activity 的前 2 条记录

datname   |  pid  | state  |                                                                                                                              query                    

------------+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
 lookup     | 22243 | active | copy cell_info(radio, mcc, net, area, cell, unit, lon, lat, range, samples, changeable, created, updated, average_signal) From '/data/cell-dup.cs
v' DELIMITER ',' CSV HEADER

 lookup     |  6529 | active | SELECT * FROM "public"."cell_info" WHERE "cell"=$1 and “net"=$4 ORDER BY "cell_info_id" LIMIT 1

【问题讨论】:

  • 我相信你必须等到 COPY 命令完成才能查询表。其他任何事情都会破坏数据库的目的。
  • @JimJones: copy 只是插入到表中,不应阻塞 SELECT 语句。
  • 您应该检查 SELECT 正在等待什么。 ps 不是写工具,需要检查 pg_locks 和 pg_stat_activity:wiki.postgresql.org/wiki/Lock_Monitoring

标签: postgresql psql postgresql-9.3 postgresql-9.2


【解决方案1】:

你可以从 postgres 活动日志中调试

 SELECT datname,pid,state,query FROM pg_stat_activity

Execute this query and find the state of query

【讨论】:

    【解决方案2】:

    并发事务在表上持有ACCESS EXCLUSIVE 锁。 TRUNCATEALTER TABLECREATE INDEX 等语句需要此类锁。

    您可以通过查询pg_locks 视图找出是哪笔交易。

    pg_stat_activity 会告诉你并发事务在做什么。不过,不一定是事务中的最后一条语句导致了锁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-15
      • 2020-04-15
      • 2020-09-22
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多