发新话题
打印

PostgreSQL 常见问题(FAQ)

PostgreSQL 常见问题(FAQ)

  最近更新:2000 年 三月二十一日 星期二 16:09:11 EST

目前维护人员:Bruce Momjian (pgman@candle.pha.pa.us)
中文版维护人员:何伟平 (laser@zhengmai.com.cn)


本文档的最新版本可以在 postgreSQL Web 站点上看到,http://www.PostgreSQL.org。

Linux 相关的问题在 http://www.PostgreSQL.org/docs/faq-linux.html 里回答。

Irix 相关的问题在 http://www.PostgreSQL.org/docs/faq-irix.html 里回答。

HPUX 相关的问题在 http://www.PostgreSQL.org/docs/faq-hpux.shtml 里回答。


--------------------------------------------------------------------------------

常见问题
1.1) PostgreSQL 是什么?
1.2) PostgreSQL 的版权是什么?
1.3) PostgreSQL 运行在什么 Unix 平台上?
1.4) 可用的非unix平台有那些?
1.5) 我在那里能得到 PostgreSQL?
1.6) 我从那里能得到对 PostgreSQL 的支持?
1.7) PostgreSQL 最新的版本是什么?
1.8) 可获得的 PostgreSQL 的文档有那些?
1.9) 我如何了解已知的臭虫或缺失的特性?
1.10) 我应该怎样学习 SQL ?
1.11) PostgreSQL 是 Y2K 兼容的吗?
1.12) 我应该怎样加入开发队伍?
1.13) 我应该怎样提交一个臭虫报告?
1.14) PostgreSQL 和其他 DBMS 比起来如何?


用户客户端问题
2.1) 有 PostgreSQL 的 ODBC 驱动程序么?
2.2) 有什么工具可以把 PostgreSQL 用于 Web 页面?
2.3) PostgreSQL 拥有图形用户界面吗?有报表生成器吗?有嵌入的查询语言接口吗?
2.4) 我们可以用什么语言和 PostgreSQL 打交道?


管理员问题
3.1) 为什么 initdb 会失败?
3.2) 我怎样能把 PostgreSQL 装在 /usr/local/pgsql 以外的地方?
3.3) 当我运行 postmaster 时,我收到Bad System Call(系统调用错)或者内核倾倒消息。为什么?
3.4) 当我试图运行 postmaster 时,我收到 IpcMemoryCreate errors3 消息。为什么?
3.5) 当我试图运行 postmaster 时,我收到 IpcSemaphoreCreate 错误。为什么?
3.6) 我如何禁止其他主机访问我的 PostgreSQL 数据库
3.7) 为什么我无法从其他机器上联接到我的数据库来?
3.8) 为什么我不能以 root 用户身份访问数据库?
3.9) 为什么在并行访问表时,我的所有(数据库)服务器都崩溃了?
3.10) 我怎样调节数据库引擎以获得更好的性能?
3.11) PostgreSQL 里可以获得什么样的调试特性?
3.12) 当我试图联接时收到'Sorry, too many clients' 消息。这是为什么?
3.13) 我的数据库目录里面的 pg_psort.XXX 文件是什么?
3.14) 我如何设置一个 pg_group?


操作问题
4.1) 系统看起来被逗号,小数点和日期格式弄糊涂了。
4.2) 二进制游标和普通游标之间准确的区别是什么?
4.3) 我如何只 select (选取)一个查询的头几行?
4.4) 我如何获取一个表的列表,或者是其他我能在 psql 里看到的东西?
4.5) 你怎样从一个表里面删除一个列?
4.6) 一行,一个表,一个库的最大尺寸是多少?
4.7) 存储一个典型的平面文件里的数据需要多少磁盘空间?
4.8) 我如何查看一个数据库里面定义了那些索引或者操作?
4.9) 我的查询很慢或者没有利用索引。为什么?
4.10) 我如何才能看到查询优化器是怎样计算我的查询的?
4.11) R-tree 索引是什么?
4.12) 什么是基因查询优化(Genetic Query Optimization)?
4.13) 我怎样做规则表达式搜索和大小写无关搜索?
4.14) 在一个查询里,我怎样检测一个字段是否为 NULL?
4.15) 各种字符类型之间有什么不同?
4.16.1) 我怎样创建一个序列号/自动递增的字段?
4.16.2) 我如何获得一个插入的序列号的值?
4.16.3) 使用 currval() 和 nextval() 会导致一个与其他并行后端进程之间的一个竞争条件吗?
4.17) 什么是 oid?什么是 tid?
4.18) 里 PostgreSQL 使用的一些术语的含义是什么?
4.19) 为什么我收到错误 "FATAL: palloc failure: memory exhausted?"
4.20) 我如何才能知道我运行的 PostgreSQL 的版本?
4.21) 为什么我的大对象操作收到invalid large obj descriptor(非法大对象描述符)。?
4.22) 我如何创建一个缺省值是当前时间的字段?
4.23) 为什么我的使用 IN 的子查询这么慢?


扩展 PostgreSQL
5.1) 我写了一个用户定义函数。当我在psql 里运行它时,为什么会导致内核倾倒?
5.2) 消息:NOTICE:PortalHeapMemoryFree: 0x402251d0 not in alloc set! 是什么意思?
5.3) 我如何能给 PostgreSQL 贡献一些挺不错的新类型和函数?
5.4) 我怎样写一个返回一条记录的 C 函数?
5.5) 我修改了源代码。为什么重新编译后没有看到改变?



--------------------------------------------------------------------------------

常见问题
1.1) PostgreSQL是什么?
PostgreSQL 是一个 POSTGRES 数据库管理系统的增强版,是一个下一代 DBMS 的研究原型。PostgreSQL 在保持 POSTGRES 的强大的数据模型和丰富的数据类型的基础上,用一个扩展了的 SQL 的子集取代了原先的 PostQuel 查询语言。 PostgreSQL 是自由的并且所有源代码都可以获得。

PostgreSQL 的开发是由一个互联网相联的开发人员队伍进行的,他们都参加 PostgreSQL 开发邮件列表。目前的协调人是  Marc G. Fournier (scrappy@postgreSQL.org)。(如何加入参阅下文)。这个队伍现在负责 PostgreSQL  所有目前的和未来的开发。

PostgreSQL 1.01 的作者是 Andrew Yu 和 Jolly Chen。还有许多其他人为移植,测试,调试和增强代码做了大量贡献。PostgreSQL 起源的最初的 Postgres 的代码,是在加州大学伯克利分校的 Michael Stonebraker 教授的指导下,由许多研究生,本科生和编程职员完成的。

这个软件最初在伯克利的名字是 Postgres。在 1995 年,当增加了 SQL 功能后,它的名字改成 Postgres95。在 1996年末,这个名字改为 PostgreSQL。

1.2) PostgreSQL 的版权是什么?
PostgreSQL 受下面的版权约束。

PostgreSQL 数据库管理系统

(PostgreSQL Data Base Management System)

部分版权(c)1996-2000,PostgreSQL,Inc 部分版权(c)1994-6 加州大学董事

(Portions copyright (c) 1996-2000, PostgreSQL, Inc Portions Copyright (c) 1994-6 Regents of the University of California)

允许为任何目的使用,拷贝,修改和分发这个软件和它的文档而不收取任何费用,并且无须签署因此而产生的证明,前提是上面的版权声明和本段以及下面两段出现在所有拷贝中。

(Permission to use, copy, modify, and distribute this software and  its documentation for any purpose, without fee, and without a written  agreement is hereby granted, provided that the above copyright notice  and this paragraph and the following two paragraphs appear in all  copies.)

在任何情况下,加州大学都不承担因使用此软件及其文档而导致的对任何当事人的直接的,间接的,特殊的,附加的或者相伴而生的损坏,包括利益损失的责任,即使加州大学已经建议了这些损失的可能性时也是如此。

(IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY  PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL  DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE  AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.)

加州大学明确放弃任何保证,包括但不局限于某一特定用途的商业和利益的隐含保证。这里提供的这份软件是基于“当作是”的基础的,因而加州大学没有责任提供维护,支持,更新,增强或者修改的服务。

(THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE  PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF  CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,  ENHANCEMENTS, OR MODIFICATIONS.)

1.3) PostgreSQL 运行在什么平台上?
作者们在下面这些平台上编译和测试了 PostgreSQL (其中有些平台的编译要求使用 gcc):

aix - IBM AIX 3.2.5 或 4.x 
alpha - Digital Unix 2.0, 3.2, 4.0 上的 DEC Alpha AXP 
BSD44_derived - 从4.4-lite BSD 发展来的 OS (NetBSD,FreeBSD) 
bsdi - BSD/OS 2.x, 3.x, 4.x 
dgux - DG/UX 5.4R4.11 
hpux - HP PA-RISC 上的 HP-UX 9.*, 10.* 
i386_solaris - i386 Solaris 
irix5 - SGI MIPS 上的 IRIX 5.3 
linux - Intel i86 Alpha SPARC PPC M68k 
sco - SCO 3.2v5 Unixware 
sparc_solaris - SUN SPARC 上的 Solaris 2.4, 2.5, 2.5.1 
sunos4 - SUN SPARC 上的 SunOS 4.1.3 
svr4 - Intel x86 上的 Intel SVR4 and MIPS 
ultrix4 - DEC MIPS 上的 Ultrix 4.4 
1.4) 可用的非 unix 平台有那些?
把 libpq C 库,psql,和其他接口和二进制编译成可以在 MS Windows 平台上运行是可能的。这种情况下,客户端在 MS Windows 上运行,并且通过 TCP/IP 与一个运行在我们支持的 Unix 平台上的服务器进行通讯。

在发布包里面有一个 win31.mak 文件用于制作 Win32 的 libpq 库和 psql。

数据库服务器现在可以通过使用 Cygnus Unix/NT 移植库在 Windows NT 上面运行。参阅发布包里的 pgsql/doc/README.NT 文件。

还有一个 web 页在 http://www.freebsd.org/~kevlo/postgres/portNT.html。另外还有一个使用 U/Win 的移植在 http://surya.wipro.com/uwin/ported.html. 

1.5) 我在那里可以得到 PostgreSQL?
PostgreSQL 的主匿名 ftp 站在 ftp://ftp.postgreSQL.org/pub 

镜像站可以参考我们网站的主页。

1.6) 我从那里能得到对 PostgreSQL 的支持?
加州大学伯克利分校不对 PostgreSQL 提供任何官方支持。它是通过志愿者的行动维护的。

主要的邮件列表是:pgsql-general@postgreSQL.org。可以在那里讨论有关 PostgreSQL 的问题。要加入列表,发一封邮件内容(不是主题行)为

subscribe
end

的邮件到 pgsql-general-request@postgreSQL.org。

还可以获取摘要列表。要加入这个列表,发邮件到:pgsql-general-digest-request@postgreSQL.org,其内容为:

subscribe
end

每当主列表达到大约 30k 的消息内容时,摘要就发送给这个列表的成员。

还可以参加臭虫邮件列表。要加入这个列表,发送一个邮件到 bugs-request@postgreSQL.org,内容为:

subscribe
end

还可以参加开发人员邮件列表。要加入这个列表,发送一个邮件到 hackers-request@postgreSQL.org,内容为:

subscribe
end

其他的关于 PostgreSQL 邮件列表和其他信息可以在 PostgreSQL 的 WWW 主页找到:

http://postgreSQL.org 

在 EFNet 里还有一个 IRC 频道,频道 #PostgreSQL。我用 unix 命令irc -c '#PostgreSQL' "$USER" irc.phoenix.net

PostgreSQL 的商业支持可以在 http://www.pgsql.com/ 获得。

1.7) PostgreSQL 最新的版本是什么?
PostgreSQL 最新的版本是版本 7.0。

我们计划每四个月发布一个主要版本。

1.8) 可获得的 PostgreSQL 文档有那些?
在发布包里有一些手册,手册页和一些小的测试例子。参见 /doc 目录。(译注:应为 $PGHOME/doc)。你还可以在线浏览PostgreSQL 的手册,在 http://www.postgresql.org/docs/postgres.。

psql 有一些很好的 \d 命令,显示关于类型,操作符,函数,聚集等的信息。

web 站包含更多的文档。

1.9) 我如何了解已知的臭虫和缺失的特性?
PostgreSQL 支持一个扩展了的 SQL-92 的子集。参阅我们的 TODO,获取一个已知臭虫,缺失特性和未来计划的列表。

1.10) 我应该怎样学习 SQL?
在 http://w3.one.net/~jhoffman/sqltut.htm 和 http://ourworld.compuserve.com/homepages/Graeme_Birchall/HTM_COOK.HTM. 有一个很好的教程。

另一个是 "Teach Yourself SQL in 21 Days, Second Edition"(21天学会SQL,第二版),在 http://members.tripod.com/er4ebus/sql/index.htm 

我们的许多用户喜欢 The Practical SQL Handbook, Bowman et al., Addison Wesley.  其他的有 Lan Times Guide to SQL, Groff et al., Osborne McGraw-Hill.

1.11) PostgreSQL 是 Y2K 兼容的吗?
是,我们很容易控制 2000AD 之后和 2000BC 之前的日期。

1.12) 我应该怎样加入开发队伍?
首先,下载最新的源代码和阅读我们 web 站上的 PostgreSQL 开发者文档。第二,加入 pgsql-hackers 和 pgsql-patches 邮件列表。第三,向 pgsql-patches 提交高质量的补丁程序。

现在大概有十几个人有 PostgreSQL CVS 归档 COMMIT 的权限。他们都已经提交了非常多高质量的补丁了,以至于现有的提交人很难跟上节奏,并且我们相信他们提交的补丁都是高质量的。

1.13) 我怎样提交一个臭虫报告?
填充"bug-template"(臭虫模板)文件然后发送到:bugs@postgreSQL.org

同样也要看看我们的 ftp 站点 ftp://ftp.postgreSQL.org/pub,看有没有更新的 PostgreSQL 版本或补丁。

1.14) PostgreSQL 和其他 DBMS 比起来如何?
评价软件有好几种方法:特性,性能,可靠性和价格。

特性 
PostgreSQL 拥有大型商用 DBMS 里大多数特性,例如:事务,子查询,触发器,视图和复杂的锁定等。我们还有一些它们没有的特性,如用户定义类型,继承,规则和多版本并行控制以减少锁的争用等。我们还没有外键参考完整或外部联合(foreign key referential  integrity or outer joins),不过正在准备在下一个版本增加这些特性。


性能 
PostgreSQL 在两种模式下运行。通常的 fsync (同步)模式把每个完成的事务都冲洗到磁盘上,以保证如果 OS 崩溃了或者在下几秒钟出现掉电的情况下,你的所有数据都安全地存放在磁盘上。这种模式下,我们比大多数商用数据库都慢,部分原因是因为那些数据库缺省状态下很少这样保守地向磁盘冲洗数据。在 no-fsync (非同步)模式下,我们一般都比商用数据库快,尽管在这种模式下,一个 OS 的崩溃将导致数据损坏。我们正在建设一种中间模式,这种模式比完全同步(fsync)模式的性能损失小,而且将保证在OS 崩溃情况下的 30 秒内的数据完整。这种模式可以由数据库管理员选择。

与 MySQL 或更轻便的数据库系统比较,我们在 insert/update 时慢,因为我们有额外的事务处理。当然 MySQL 不具有我们在上面的特性段里给出的任何特性。我们的主要方向是灵活性和特性,尽管我们通过优化和源码分析不断地改进性能。

我们通过创建一个 Unix 进程处理每个用户的联接。后端进程共享数据缓冲区和锁信息。在多 CPU 的条件下,多个后端很容易运行在不同的 CPU 上。


可靠性 
我们知道 DBMS 必须是可靠的,否则它就一点用都没有。我们努力做到发布经过认真测试的,稳定的臭虫最少的代码。每个版本至少有一个月的  beta 测试,并且我们的发布历史显示我们可以提供稳定的,牢固的,可用于生产使用的版本。我们相信在这方面我们与其他的数据库软件是相当的。


支持 
我们的邮件列表提供一个非常大的开发人员和用户的组以帮助解决所碰到的任何问题。我们不能保证肯定能解决问题,相比之下,商用 DBMS 也并不是总能够提供解决方法。直接与开发人员,用户群,手册和源程序接触令 PostgreSQL 的支持比其他 DBMS 还要好。还有一些商业性的预包装的支持,可以给提供给那些需要的人。(参阅支持 FAQ 条款。)


价格 
我们对任何用途都免费,包括商用和非商用目的。你可以不加限制地向你的产品里加入我们的代码,除了那些我们在上面的版权声明里声明的 BSD 风格的版权外。



--------------------------------------------------------------------------------

用户客户问题
2.1) 有 PostgreSQL 的 ODBC 驱动么?
有两个 ODBC 驱动可以获得,PostODBC 和 OpenLink ODBC.

在发布版本里面包含。关于它的更多信息可以从:http://www.insightdist.com/psqlodbc 获得。

OpenLink ODBC 可以从 http://www.openlinksw.com 获得。它与他们的标准 ODBC 客户端软件兼容,因而你可以在任何他们支持的客户端平台(Win, Mac, Unix, VMS)上使用 PostgreSQL ODBC。

他们可能将这个产品销售给那些需要商业支持的用户,但是总是有一个 freeware (自由软件)的版本可以得到。请询问 postgres95@openlink.co.uk。

2.2) 有什么工具可以把 PostgreSQL 用于 Web 页面?
一个介绍以数据库为后台的 Web 页面在:http://www.webtools.com。

还有一个在:http://www.phone.net/home/mwm/hotlist/。

对于 web 集成,PHP 是一个极好的接口。它在:http://www.php.net

PHP 很适合用于简单任务,但对于更复杂的任务,可以使用 perl 接口和 CGI.pm。

一个以 WDB 为基础,使用 perl 的 WWW 网关可以从 http://www.eol.ists.ca/~dunlop/wdb-p95 下载。

2.3) PostgreSQL 拥有图形用户界面吗?有报表生成器吗?有嵌入的查询语言接口吗?
我们有一个叫 pgaccess 的很好的图形用户接口,它是做为发布版本的一部分发布的。Pgaccess 还有一个报表生成器。它的网页在 http://www.flex.ro/pgaccess

我们还有 ecpg,它是一个用于 C 的嵌入的 SQL 查询语言接口。

2.4) 我们可以用什么语言和 PostgreSQL 打交道?
我们有:

C(libpq) 
C  (libpq  ) 
Embedded C(ecpg) 
Java(jdbc) 
Perl(perl5) 
ODBC(odbc) 
Python(PyGreSQL) 
TCL(libpgtcl) 
C 简易 API(libpgeasy) 
嵌入的 HTML(PHP,来自 http://www.php.net) 

--------------------------------------------------------------------------------

管理员问题
3.1) 为什么 initdb 会失败?
检查一下,确保你的路径里没有任何以前版本的二进制文件(如果你看到消息 WARN:heap_modifytuple: repl is \ 9,那么就是这个问题。) 
检查一下,看看你有没有正确设置路径。 
检查一下,看看 postgres 用户是否拥有正确的文件 
3.2) 我怎样能把 PostgreSQL 装在 /usr/local/pgsql 以外的地方?
最简单的方法是在运行 configure 的时候声明 --prefix 选项。如果你忘记这么做了,你可以编辑  Makefile.global 并相应地修改 POSTGRESDIR,或者创建一个 Makefile.custom 并且在那里定义  POSTGRESDIR。

3.3) 当我运行 postmaster 时,我收到Bad System Call (系统调用错)或内核倾倒。为什么?
这可能是很多方面的问题,但首先应该检查你在内核里配置安装了 system V (系统 V)扩展。PostgreSQL 需要内核支持共享内存和信号灯。

3.4) 当我试图运行 postmaster 时,我收到 IpcMemoryCreate 错误。为什么?
你要么是没有在内核里正确配置共享内存,要么是你需要扩大你的内核的可用共享内存。你需要的共享内存具体的数量取决于你的体系结构和你配置你的 postmaster 运行时使用的缓冲区和后端进程数目。对大多数系统,使用缺省缓冲区和进程数目时,你最少需要~1MB。

3.5) 当我试图运行 postmaster 时,我收到 IpcSemaphoreCreate 错误。为什么?
如果错误信息是 IpcSemaphoreCreate: semget failed (No space left on device),那么原因是你的内核没有配置足够的信号灯资源。Postgres 的每个潜在的后端进程都需要一些信号灯。一个临时的解决方法是以比较少的后端数量(参数)启动 postmaster。使用开关 -N 带一个少于缺省值 32 的参数运行 postmaster。更长久的解决方法是加大你的内核的  SEMMNS 和 SEMMNI 参数。

如果错误信息是其他的什么东西,你可能就根本没有在内核里面配置信号灯支持。

3.6) 我如何禁止其他主机访问我的 PostgreSQL 数据库?
缺省时,PostgreSQL 只允许通过 unix 域套接字来自本机的联接。除非你使用 -i 开关启动 postmaster,并且通过对应的编辑 $PGDATA/pg_hba.conf 文件打开了主机为基础( host-based )的认证,否则其他机器是不能与你的机器联接的。这样将允许 TCP/IP 联接。

3.7) 为什么我无法从其他机器上联接到我的数据库来?
缺省的配置只允许从本地利用 unix 域套接字与数据库联接。要打开 TCP/IP 联接,确信你是带着 -i 开关运行  postmaster 的,并且相应的向文件 pgsql/data/pg_hba.conf 里增加了一些恰当的主机记录。参考  pg_hba.conf 手册页。

3.8) 为什么我不能以 root 用户身份访问数据库?
你不应以用户标识(user id)0 (root)创建数据库。他们将不能访问数据库。这是一种安全预防措施,以避免任何用户都能动态地把对象模块与数据库进行引擎链接。

3.9) 为什么在并行访问表时,我的所有(数据库)服务器都崩溃了?
这个问题可能是因为内核没有配置成支持信号灯引起的。

3.10) 我怎样调节数据库引擎以获得更好的性能?
当然,索引可以加速查询。EXPLAIN 命令允许你观察 PostgreSQL 如何解释你的查询,以及使用了哪个索引。

如果你正处理一堆 INSERT,考虑使用 COPY 命令以大批量的方式进行。这样做比单独一个 INSERTS 快得多。第二,没有处于  BEGIN WORK/COMMIT 事务块之间的语句被认为处于它们自身的事务里面。试着在一个事务块里面处理更多的语句。这样可以减少事务带来的过荷。同样,在做大量的数据改变时考虑删除和重建索引。

还有几件调节的方法可以使用。你可以通过带 -o -F 选项运行 postmaster 关闭 fsync()。这样将避免每次事务后调用 fsync() 把数据冲刷到磁盘上。

你还可以使用 postmaster -B 选项增加后端进程使用的共享内存缓冲的数目。如果你把这个参数设置得太高,postmaster 可能无法启动,因为你已经超过了你的内核在共享内存空间上的限制。每个缓冲区是 8K 并且缺省 64 个缓冲区。

你还可以使用后端的 -S 选项来增加每个后端用于临时排序用的最大内存数量。-S 值是以千字节计的,缺省是 512 (也就是说,512K)。把这个数目搞得太大也不是个好主意,因为你可能在一个查询激活多个并行排序时用光内存。

你还可以使用 CLUSTER 命令来把一个基本表里的数据按照索引的匹配进行分组。参阅 cluster(l) 的手册页获取更多细节。

3.11) PostgreSQL 里可以获得什么样的调试特性?
PostgreSQL 有几个特性用于报告状态信息,这些信息可能对调试用途很有帮助。

首先,通过附带 --enable-cassert 选项运行 configure,有很多 assert() 监控后端的过程和在发生某些未曾预料的现象时停止程序运行。

postmaster 和 postgres 都有一些可用的选项。首先,当你启动 postmaster 时,确保你把标准输出和标准错误定向到了一个日志文件里去了,象:

cd /usr/local/pgsql
./bin/postmaster >server.log 2>
相关主题

TOP

发新话题