首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使只读的从Postgresql12数据库可写?

要使只读的从PostgreSQL 12数据库可写,可以通过以下步骤实现:

  1. 首先,确保你具有足够的权限来修改数据库配置。你需要以超级用户身份登录到PostgreSQL服务器。
  2. 打开PostgreSQL的配置文件,该文件通常位于/etc/postgresql/12/main/postgresql.conf(Linux)或C:\Program Files\PostgreSQL\12\data\postgresql.conf(Windows)。
  3. 在配置文件中找到listen_addresses参数,并确保其值为'*',以允许从任何IP地址连接到数据库。
  4. 找到shared_preload_libraries参数,并确保其值包含pg_stat_statements,以启用统计信息收集。
  5. 找到max_connections参数,并根据需要增加其值,以允许更多的并发连接。
  6. 找到wal_level参数,并将其值设置为logical,以启用逻辑复制。
  7. 找到max_wal_senders参数,并根据需要增加其值,以允许更多的逻辑复制发送者。
  8. 找到wal_keep_segments参数,并根据需要增加其值,以确保足够的WAL日志段用于逻辑复制。
  9. 保存并关闭配置文件。
  10. 重新启动PostgreSQL服务器,以使配置更改生效。
  11. 接下来,创建一个新的数据库用户,并为其授予适当的权限。可以使用以下命令在PostgreSQL命令行界面执行:
代码语言:txt
复制
CREATE USER writable_user WITH PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE your_database TO writable_user;

writable_user替换为你想要创建的用户名,password替换为相应的密码,your_database替换为你想要使可写的数据库名称。

  1. 现在,你可以使用新创建的用户连接到数据库,并进行写操作。可以使用以下命令在PostgreSQL命令行界面执行:
代码语言:txt
复制
psql -U writable_user -d your_database

writable_user替换为你创建的用户名,your_database替换为你想要使可写的数据库名称。

通过以上步骤,你可以将只读的从PostgreSQL 12数据库变为可写,并使用新创建的用户进行写操作。请注意,这些步骤仅适用于PostgreSQL 12版本,其他版本可能会有所不同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

CentOS7下安装PostgreSQL12

PostgreSQL是一个功能强大的开源数据库系统。经过长达15年以上的积极开发和不断改进,PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内极高的声誉。PostgreSQL是完全的事务安全性数据库,完整地支持外键、联合、视图、触发器和存储过程(并支持多种语言开发存储过程)。它支持了大多数的SQL:2008标准的数据类型,包括整型、数值型、布尔型、字节型、字符型、日期型、时间间隔型和时间型,它也支持存储二进制的大对像,包括图片、声音和视频。PostgreSQL对很多高级开发语言有原生的编程接口,作为一种企业级数据库,PostgreSQL以它所具有的各种高级功能而自豪,像多版本并发控制(MVCC)、按时间点恢复(PITR)、表空间、异步复制、嵌套事务、在线热备、复杂查询的规划和优化以及为容错而进行的预写日志等。它支持国际字符集、多字节编码并支持使用当地语言进行排序、大小写处理和格式化等操作。它也在所能管理的大数据量和所允许的大用户量并发访问时间具有完全的高伸缩性

01
  • 表空间的状态(二) - read/write

    1. 只读表空间的主要用途就是为了消除对数据库大部分静态数据的备份和恢复的需要。Oracle不会更新只读表空间爱你的文件,因此这部分文件可以存储于只读介质中,例如CD-ROM或WORM drives。 2. 只读表空间并不是为了满足归档的要求。只读表空间不能修改。如果需要修改只读表空间中的记录,则需要先将表空间置为read/write。更新表空间后,可以重置为只读。 3. 由于只读表空间不能修改,所以只要没有置为read/write,就不需要重复地进行备份。而且,如果需要恢复数据库时,也不需要恢复只读表空间,原因就是他们未曾修改过。 4. 能从只读表空间中删除对象,例如表或索引,但不能创建或修改对象。可以执行修改数据字典中文件描述的语句,例如ALTER TABLE ... ADD或ALTER TABLE ... MODIFY,但不能添加任何新的描述信息,除非表空间置为read/write。 5. 只读表空间可以导出导入到其他数据库。既然只读表空间不能修改,他们就能存储于CD-ROM或WORM(一次写-多次读)这些设施中。 6. 所有表空间初始创建都是read/write。使用READ ONLY子句可以设置表空间为只读。前提是必须具有ALTER TABLESPACE或MANAGE TABLESPACE的系统权限。 使用ALTER TABLESPACE ... READ ONLY前,需要满足以下条件: > 表空间处于online状态。这是为了确保不会有UNDO信息需要应用到表空间。注:如果处于offline,则会将UNDO信息存储于SYSTEM表空间,待恢复online时应用这些UNDO信息。 > 不能修改活动的UNDO表空间或SYSTEM表空间。 > 表空间不能处于当前正在进行的online备份中,因为备份结束时会更新表空间所有数据文件的头部信息。 > 为了让从只读表空间读取数据得到更好的性能,可以在置为read-only之前执行一次访问表空间的表中所有数据块的查询。一个像SELECT COUNT(*)这样简单的查询,就可以确保在表空间的数据块在接下来的访问中获得最佳的效率。因为这种做法就不需要数据库检查最近经常修改数据块的交易状态。 7. 可以在数据库正处理交易的时候执行ALTER TABLESPACE ... READ ONLY语句。执行语句后,表空间就处于交易只读状态。不会允许任何交易(DML操作)应用于表空间。如果尝试进行交易操作,那么此操作会被终止和回滚。然而,那些已经做了变更并不再进行进一步修改的交易,就允许执行commit或roll back操作。 如果ALTER TABLESPACE ... READ ONLY语句执行前,一个交易已经执行了,但是回滚到一个保存点,回滚了他对表空间的变更,那么ALTER TABLESPACE ... READ ONLY语句不会等待这个活动的交易。 8. 交易级只读状态仅仅当初始化参数COMPATIBLE是8.1.0或以上值时才能使用。如果参数值小于8.1.0,并且存在活动的交易,ALTER TABLESPACE ... READ ONLY语句会失败。 9. 如果ATLER TABLESPACE语句执行时间太长了,那么就需要找到阻止只读状态生效的那些交易。如下语句可以找出执行ALTER TABLESPACE ... RAED ONLY语句的交易入口和session地址(saddr): SELECT SQL_TEXT, SADDR FROM V$SQLAREA,V$SESSION WHERE V$SQLAREA.ADDRESS = V$SESSION.SQL_ADDRESS AND SQL_TEXT LIKE 'alter tablespace%'; SQL_TEXT                                  SADDR ---------------------------------------- -------- alter tablespace tbs1 read only           80034AF0 每个活动交易的开始SCN会存储于V$TRANSACTION视图中。起始SCN越小,说明这步操作就越早。潜在地这条语句越可能阻止接下来只读状态的变更。 SELECT SES_ADDR, START_SCNB FROM V$TRANSACTION ORDER BY START_SCNB; SES_ADDR START_SCNB -------- ---------- 800352A0 3621 --> waiting on this txn 80035A50 3623 --> waiting on this txn 80034AF0 3628 --> this is the ALTE

    02
    领券