我使用以下命令导入了我的表:
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)
有什么想法吗?
答案 0 :(得分:0)
此类问题的可能原因包括:
1)在一个事务中创建了表,将其复制到另一个事务中然后,如果忽略提交,则尝试在另一个会话中进行选择。事实上我今天发生了类似的事情:-P
2)复制成功,稍后在事务中失败,导致所有行在回滚时消失。
由于PostgreSQL存储数据的方式,这些都是非常常见的情况,几乎解释了所有这些行消失。两者都是设计行为,并通过确保插入行的事务正确提交而没有其他错误来解决。