0.3 完成首次连通
最后一步不是“能打开 psql”,而是从连接内部确认操作落点,并保存一份不泄露凭据的
baseline。第 1 章会在此基础上创建本书专用数据库、模式和角色。
0.3.1 找到服务端点、数据库与实验凭据
五元连接身份
host/service
port/route semantics
database
role
TLS/session parameters
默认单节点通常提供 pg-meta cluster、meta database 与管理/业务/只读角色;实际值
从你的 pigsty.yml 读取。该文件含 secret,只在受控终端查看,不把整行 URI 或密码
复制进 shell history、截图和文档。
首次连接可让 psql 单独提示密码:
psql -h 127.0.0.1 -p 5432 -U dbuser_dba -d meta -W
不要把密码写在命令行 URI。需要非交互任务时使用 mode 0600 的 .pgpass、service
file 或组织 secret injection,并确保日志不打印环境。
先直连,后比较 service
先用 5432 直连确认 PostgreSQL,再按本地配置比较 6432/5433/5436。对每个 endpoint
执行同一 identity query,记录它是否经过 pool、route 到哪个 backend、支持什么会话
状态。不要把“端口可连”推断成“读写语义正确”。
常见失败
0.3.2 执行 SELECT version() 与只读状态查询
在 psql:
\ set ON_ERROR_STOP on
\ pset pager off
SELECT
current_setting ( 'server_version' ) AS server_version ,
current_setting ( 'server_version_num' ) AS server_version_num ,
current_database () AS database ,
current_user AS role ,
session_user ,
inet_server_addr () AS server_addr ,
inet_server_port () AS server_port ,
pg_is_in_recovery () AS in_recovery ;
SELECT
current_setting ( 'transaction_read_only' ) AS transaction_read_only ,
current_setting ( 'default_transaction_read_only' )
AS default_transaction_read_only ;
Unix socket 连接时 inet_server_addr()/inet_server_port() 可以是 NULL,这是 transport
语义,不是 PostgreSQL 缺地址。service endpoint 可能返回 backend instance 地址,
不等于客户端连接的 HAProxy 地址。
再检查 search path 与身份:
SHOW search_path ;
SELECT current_schemas ( true );
SELECT
pg_catalog . pg_has_role ( current_user , 'USAGE' ) AS current_role_usable ;
version() 包含 build 信息,适合证据;程序判断用 server_version_num,不要解析展示
字符串。
保存去敏基线
psql -X -v ON_ERROR_STOP = 1 \
-h 127.0.0.1 -p 5432 -U dbuser_dba -d meta \
-A -F $'\\t' -t \
-c \" SELECT current_setting( 'server_version_num' ) ,
current_database() , current_user,
coalesce( inet_server_addr() ::text, 'unix-socket' ) ,
coalesce( inet_server_port() ::text, 'unix-socket' ) ,
pg_is_in_recovery() ; \" \
> pg36-l1-identity.tsv
该输出不含 password;仍按内部环境资料保护 host/role。检查退出码与文件非空,不要因
redirect 创建空文件就认为成功。
0.3.3 确认编码、时区和扩展清单后进入 ch01
locale/time/encoding
SELECT
datname ,
pg_encoding_to_char ( encoding ) AS encoding ,
datlocprovider ,
datcollate ,
datctype
FROM pg_catalog . pg_database
WHERE datname = current_database ();
SHOW TimeZone ;
SHOW DateStyle ;
SELECT
now () AS transaction_time ,
statement_timestamp () AS statement_time ,
clock_timestamp () AS wall_time ;
后续时间、collation、索引和升级实验依赖这些事实。不要为了“统一”直接修改 cluster;
先记录差异,在对应章节决定是否需要重建或迁移。
installed 与 available extension 分开
当前数据库已安装:
SELECT
extname ,
extversion ,
extnamespace :: pg_catalog . regnamespace AS schema
FROM pg_catalog . pg_extension
ORDER BY extname ;
操作系统/仓库可提供但未安装的扩展是另一集合,不能用
pg_available_extensions 冒充 installed。扩展是 database-local object;同一
instance 的另一 database 不会自动继承。
最终 baseline
book_baseline :
environment : pg36-l1
production_data : false
production_traffic : false
pigsty_release : v4.5.0
pig_cli : ...
postgresql_server : ...
os_kernel_arch : ...
cluster_database_role : ...
connection_endpoint : ...
encoding_locale_timezone : ...
installed_extensions : [ ...]
monitoring_observed_at : ...
secret_values_recorded : false
进入 ch01 的 gate:
identity query succeeds
server major = 18, exact minor recorded
database and role are expected
L1 is writable and not in recovery
encoding/timezone/collation recorded
installed extension list recorded
monitoring has current target data
no production data/traffic or exposed management endpoint
不满足时留在第 0 章修环境。满足后进入
第 1 章:PostgreSQL 与 Pigsty 全局地图 ,在那里创建
pg36_shop,不要把默认 meta database 当作全书业务模型。
上一节:安装单节点 Pigsty 沙箱 · 返回本章目录 ·
进入第 1 章 ·
查看全书目录 · 查看索引中心