使用psql连接PostgreSQL的基本操作问答
1. 连接PostgreSQL数据库:
o 我提供了使用psql命令行工具连接数据库的方法。psql --version; (切换到postgres用户)psql -d 数据库名(可不指定) -U 用户名; psql -h 主机地址 -p 端口号 -d 数据库名 -U 用户名
o 你提到不知道数据库名,我指导你如何使用psql列出所有数据库。\l or \list
o 你询问了如何连接到特定数据库(如dwd)并列出该数据库中的表。
o 我提供了相应的psql命令。\c dwd postgres; \dt; \dt *hr*
o 你想知道如何查看dwd_xxx_df表中的前3条数据。... limit 3
2. 查看表的relfilenode:
o 你想知道如何查看dwd_xxx_df表的relfilenode文件名。以及dwd库的OID.
o SELECT relname, relfilenode FROM pg_class WHERE relname = 'dwd_xxx_df';
o 除了relfilenode文件,还额外有2个文件:文件名通常是relfilenode值(一个数字)加上_fsm(用于存储表的空闲空间映射)和_vm(用于存储可见性映射)后缀。
o SELECT oid, datname FROM pg_database WHERE datname = 'dwd';
3. 查看表文件的内容:
o 你找到了dwd_xxx_df表的relfilenode,并询问如何查看文件的内容。
o 你提到hexdump的ASCII字符模式不能正常显示中文,询问是否有改进的方法。瞎回答。
4. 创建表的副本:
o 我提供了使用CREATE TABLE AS SELECT和SELECT INTO两种方法来创建表的副本。
在$PGDATA/base/目录下,base和pg_wal这2个目录占用存储空间较大,请解释一下他们的用处
在PostgreSQL的文件系统布局中,$PGDATA是PostgreSQL数据目录的顶级目录,其中包含了数据库的所有文件。在这个目录下,base和pg_wal是两个非常重要的子目录,它们的作用如下:
1. base目录:
o base目录包含了PostgreSQL数据库集群的所有数据库文件。每个数据库在base目录下都有一个与其OID(对象标识符)相对应的子目录。例如,数据库dwd的文件可能位于base/12345这样的目录下,其中12345是该数据库的OID。
o 在每个数据库的子目录中,包含了该数据库的所有表空间文件。对于系统默认的表空间,表文件通常以relfilenode(一个数字)命名,其中relfilenode是表的唯一标识符。
o 除了表文件,base目录还包含了索引文件、TOAST数据(用于存储大型字段溢出的数据)、自由空间映射(FSM)和可见性映射(VM)文件等。
o base目录的大小取决于存储的数据量和索引的数量,因此它是数据库存储空间占用的主要部分。
2. pg_wal目录:
o pg_wal目录包含了WAL(Write-Ahead Logging)文件,这些文件是PostgreSQL的事务日志。WAL文件用于数据恢复和复制,确保事务的持久性和一致性。
o PostgreSQL在事务提交时会先将变更写入WAL文件,然后再写入数据文件,这是为了在发生故障时能够恢复未完成的事务。
o WAL文件对于数据库的可靠性和容错性至关重要,它们允许数据库在发生崩溃后恢复到最后一次一致的状态。
o pg_wal目录的大小取决于你的WAL保留策略和数据库的写入负载。高写入负载的数据库会产生更多的WAL文件,因此pg_wal目录可能会占用较大的存储空间。
- 点赞
- 收藏
- 关注作者
评论(0)