将PostgreSQL备份和恢复操作完成
简而言之
因为有时需要复制Postgres的数据,所以先留下备忘录。
垃圾车 (lā jī chē)
为了删除不再需要的textsearch_ja等扩展功能,本次决定将数据库结构和数据分别转储。
# スキーマ(構造)
$ pg_dump -U hoge_admin -h 127.0.0.1 -s -p 5432 --create hoge_db > ~/schema.sql
# データ出力
$ pg_dump -U hoge_admin -h 127.0.0.1 -a -p 5432 hoge_db > ~/data.sql
文件传输
请使用以下命令将转储文件传输到目标服务器。
$ scp ~/schema.sql hoge@[IPアドレス(転送先)]:/home/hoge/
恢复
使用以下命令进行恢复。
# 構造作成
$ psql -U hoge_admin -h 127.0.0.1 -d postgres -f schema.sql
# データ登録
$ psql -U hoge_admin -h 127.0.0.1 hoge_db < data.sql
确认数量
我們來確認一下各個表的記錄數量。
SELECT
t2.relname,
t2.reltuples
FROM
pg_stat_user_tables AS t1
INNER JOIN
pg_class AS t2 ON t1.relname = t2.relname
ORDER BY
t2.relname
;
查看以下文章时,与实际表格的记录数相比,数量不同…
当想要在PostgreSQL中查看每个数据表的记录数量时,
ひとつ注意すべき点は、reltuplesが
Number of rows in the table. This is only an estimate used by the planner. It is updated by VACUUM, ANALYZE, and a few DDL commands such as CREATE INDEX
つまり、「だいたいの数値であって正しいとは限らないぜ」ってトコ。
看来用这个无法确认转储是否正常进行,有没有其他好的方法呢…
<方法1>
select count(*) from table_name;
<方法2>
select relname as name, reltuples as rows from pg_class where relname ='table_name'
※1と2で件数が異なる場合は、反映されていない状態なので、
「vacuum table_name」で反映させる。
原来如此,使用真空吸尘器就可以适应数量了吗…
vacuum survey_responses
或者,可以使用以下SQL语句生成查询以获取每个表的记录数。
SELECT
ARRAY_TO_STRING(
ARRAY(
SELECT
('SELECT ''' || relname || ''' AS table, COUNT(*) AS rows FROM ' || relname) AS query
FROM
pg_stat_user_tables
ORDER BY
relname ASC
)
, chr(10) ||' UNION ' || chr(10))
|| chr(10) || ';'
;
上述查询的执行结果
SELECT 'hoge1' AS table, COUNT(*) AS rows FROM hoge1
UNION
SELECT 'hoge2' AS table, COUNT(*) AS rows FROM hoge2
UNION
SELECT 'hoge3' AS table, COUNT(*) AS rows FROM hoge3
UNION
SELECT 'hoge4' AS table, COUNT(*) AS rows FROM hoge4
UNION
SELECT 'hoge5' AS table, COUNT(*) AS rows FROM hoge5
UNION
SELECT 'hoge6' AS table, COUNT(*) AS rows FROM hoge6
;
如果你尝试复制粘贴执行这个,似乎可以进行比较。
以上。 .)
请参考以下网站
-
- PostgresSQLでDBの全テーブルのレコード数一覧を確認
- SCPコマンドでローカルのファイルをサーバにアップ&サーバ上のファイルをDL