postgres导入后无法从巨大的表中选择

时间:2013-05-13 18:52:12

标签: postgresql

我使用以下命令导入了我的表:

sudo -u postgres psql enwiki -c "COPY public.categorylinks FROM '`pwd`/enwiki-latest-categorylinks.txt' WITH DELIMITER E'\t' CSV QUOTE '''' ESCAPE '\\' encoding 'latin1';" 

然后我运行了一个查询来检索表统计信息:

SELECT nspname || '.' || relname AS "relation",
pg_size_pretty(pg_relation_size(C.oid)) AS "size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') ORDER BY pg_relation_size(C.oid) DESC LIMIT 20;

它给了我以下输出:

public.categorylinks          | 8864 MB
public.cl_sortkey             | 8312 MB
public.cl_from                | 3963 MB
public.category_title         | 142 MB
public.category               | 137 MB

但是,如果我尝试从categorylinks表中选择,我不会收到任何结果。 这是我的输出:

enwiki=# select count(*) from categorylinks;
count
-----
0

select * from categorylinks limit 1;
cl_from | cl_to | cl_sortkey | cl_timestamp | cl_sortkey_prefix | cl_collation | cl_type 
---------+-------+------------+--------------+-------------------+--------------+---------
(0 rows)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此类问题的可能原因包括:

1)在一个事务中创建了表,将其复制到另一个事务中然后,如果忽略提交,则尝试在另一个会话中进行选择。事实上我今天发生了类似的事情:-P

2)复制成功,稍后在事务中失败,导致所有行在回滚时消失。

由于PostgreSQL存储数据的方式,这些都是非常常见的情况,几乎解释了所有这些行消失。两者都是设计行为,并通过确保插入行的事务正确提交而没有其他错误来解决。