|
| 1 | +<Sect1> |
| 2 | + <title>Bug Reporting Guidelines</title> |
| 3 | + |
| 4 | + <para> |
| 5 | + When you encounter a bug in <productname>PostgreSQL</productname> we want to |
| 6 | + hear about it. Your bug reports are an important part in making |
| 7 | + <productname>PostgreSQL</productname> more reliable because even the utmost |
| 8 | + care cannot guarantee that every part of PostgreSQL will work on every |
| 9 | + platform under every circumstance. |
| 10 | + </para> |
| 11 | + |
| 12 | + <para> |
| 13 | + The following suggestions are intended to assist you in forming bug reports |
| 14 | + that can be handled in an effective fashion. No one is required to follow |
| 15 | + them but it tends to be to everyone's advantage. |
| 16 | + </para> |
| 17 | + |
| 18 | + <para> |
| 19 | + We cannot promise to fix every bug right away. If the bug is obvious, critical, |
| 20 | + or affects a lot of users, chances are good that someone will look into it. It |
| 21 | + could also happen that we tell you to update to a newer version to see if the |
| 22 | + bug happens there. Or we might decide that the bug |
| 23 | + cannot be fixed before some major rewrite we might be planning is done. Or |
| 24 | + perhaps it's simply too hard and there are more important things on the agenda. |
| 25 | + If you need help immediately, consider obtaining a commercial support contract. |
| 26 | + </para> |
| 27 | + |
| 28 | + <Sect2> |
| 29 | + <title>Identifying Bugs</title> |
| 30 | + |
| 31 | + <para> |
| 32 | + Before you ask <quote>Is this a bug?</quote>, please read and re-read the |
| 33 | + documentation to verify that you can really do whatever it is you are |
| 34 | + trying. If it is not clear from the documentation whether you can do |
| 35 | + something or not, please report that too, it's a bug in the documentation. |
| 36 | + If it turns out that the program does something different from what the |
| 37 | + documentation says, that's a bug. That might include, but is not limited to, |
| 38 | + the following circumstances: |
| 39 | + |
| 40 | + <itemizedlist> |
| 41 | + <listitem> |
| 42 | + <para> |
| 43 | + A program terminates with a fatal signal or an operating system |
| 44 | + error message that would point to a problem in the program (for |
| 45 | + example not <quote>disk full</quote>). |
| 46 | + </para> |
| 47 | + </listitem> |
| 48 | + |
| 49 | + <listitem> |
| 50 | + <para> |
| 51 | + A program produces the wrong output for any given input. |
| 52 | + </para> |
| 53 | + </listitem> |
| 54 | + |
| 55 | + <listitem> |
| 56 | + <para> |
| 57 | + A program refuses to accept valid input. |
| 58 | + </para> |
| 59 | + </listitem> |
| 60 | + |
| 61 | + <listitem> |
| 62 | + <para> |
| 63 | + A program accepts invalid input without a notice or error message. |
| 64 | + </para> |
| 65 | + </listitem> |
| 66 | + |
| 67 | + <listitem> |
| 68 | + <para> |
| 69 | + <productname>PostgreSQL</productname> fails to compile, build, or |
| 70 | + install according to the instructions on supported platforms. |
| 71 | + </para> |
| 72 | + </listitem> |
| 73 | + </itemizedlist> |
| 74 | + |
| 75 | + Here <quote>program</quote> refers to any executable, not only the backend server. |
| 76 | + </para> |
| 77 | + |
| 78 | + <para> |
| 79 | + Being slow or resource-hogging is not necessarily a bug. Read the documentation |
| 80 | + or ask on one of the mailing lists for help in tuning your applications. Failing |
| 81 | + to comply to <acronym>SQL</acronym> is not a bug unless compliance for the |
| 82 | + specific feature is explicitly claimed. |
| 83 | + </para> |
| 84 | + |
| 85 | + <para> |
| 86 | + Before you continue, check on the TODO list and in the FAQ to see if your bug is |
| 87 | + already known. If you can't decode the information on the TODO list, report your |
| 88 | + problem. The least we can do is make the TODO list clearer. |
| 89 | + </para> |
| 90 | + </Sect2> |
| 91 | + |
| 92 | + <Sect2> |
| 93 | + <title>What to report</title> |
| 94 | + |
| 95 | + <para> |
| 96 | + The most important thing to remember about bug reporting is to state all |
| 97 | + the facts and only facts. Do not speculate what you think went wrong, what |
| 98 | + <quote>it seemed to do</quote>, or which part of the program has a fault. |
| 99 | + If you are not familiar with the implementation you would probably guess |
| 100 | + wrong and not help us a bit. And even if you are, educated explanations are |
| 101 | + a great supplement to but no substitute for facts. If we are going to fix |
| 102 | + the bug we still have to see it happen for ourselves first. |
| 103 | + Reporting the bare facts |
| 104 | + is relatively straightforward (you can probably copy and paste them from the |
| 105 | + screen) but all too often important details are left out because someone |
| 106 | + thought it doesn't matter or the report would <quote>ring a bell</quote> |
| 107 | + anyway. |
| 108 | + </para> |
| 109 | + |
| 110 | + <para> |
| 111 | + The following items should be contained in every bug report: |
| 112 | + |
| 113 | + <itemizedlist> |
| 114 | + <listitem> |
| 115 | + <para> |
| 116 | + The exact sequence of steps <emphasis>from program startup</emphasis> |
| 117 | + necessary to reproduce the problem. This should be self-contained; |
| 118 | + it is not enough to send in a bare select statement without the |
| 119 | + preceeding create table and insert statements, if the output should |
| 120 | + depend on the data in the tables. We do not have the time |
| 121 | + to decode your database schema, and if we are supposed to make up |
| 122 | + our own data we would probably miss the problem. |
| 123 | + The best format for a test case for |
| 124 | + query-language related problems is a file that can be run through the |
| 125 | + <application>psql</application> frontend |
| 126 | + that shows the problem. (Be sure to not have anything in your |
| 127 | + <filename>~/.psqlrc</filename> startup file.) You are encouraged to |
| 128 | + minimize the size of your example, but this is not absolutely necessary. |
| 129 | + If the bug is reproduceable, we'll find it either way. |
| 130 | + </para> |
| 131 | + <para> |
| 132 | + If your application uses some other client interface, such as PHP, then |
| 133 | + please try to isolate the offending queries. We probably won't set up a |
| 134 | + web server to reproduce your problem. In any case remember to provide |
| 135 | + the exact input files, do not guess that the problem happens for |
| 136 | + <quote>large files</quote> or <quote>mid-size databases</quote>, etc. |
| 137 | + </para> |
| 138 | + </listitem> |
| 139 | + |
| 140 | + <listitem> |
| 141 | + <para> |
| 142 | + The output you got. Please do not say that it <quote>didn't work</quote> or |
| 143 | + <quote>failed</quote>. If there is an error message, |
| 144 | + show it, even if you don't understand it. If the program terminates with |
| 145 | + an operating system error, say which. If nothing at all happens, say so. |
| 146 | + Even if the result of your test case is a program crash or otherwise obvious |
| 147 | + it might not happen on our platform. The easiest thing is to copy the output |
| 148 | + from the terminal, if possible. |
| 149 | + </para> |
| 150 | + <note> |
| 151 | + <para> |
| 152 | + In case of fatal errors, the error message provided by the client might |
| 153 | + not contain all the information available. In that case, also look at the |
| 154 | + output of the database server. If you do not keep your server output, |
| 155 | + this would be a good time to start doing so. |
| 156 | + </para> |
| 157 | + </note> |
| 158 | + </listitem> |
| 159 | + |
| 160 | + <listitem> |
| 161 | + <para> |
| 162 | + The output you expected is very important to state. If you just write |
| 163 | + <quote>This command gives me that output.</quote> or <quote>This is not |
| 164 | + what I expected.</quote>, we might run it ourselves, scan the output, and |
| 165 | + think it looks okay and is exactly what we expected. We shouldn't have to |
| 166 | + spend the time to decode the exact semantics behind your commands. |
| 167 | + Especially refrain from merely saying that <quote>This is not what SQL says/Oracle |
| 168 | + does.</quote> Digging out the correct behavior from <acronym>SQL</acronym> |
| 169 | + is not a fun undertaking, nor do we all know how all the other relational |
| 170 | + databases out there behave. (If your problem is a program crash you can |
| 171 | + obviously omit this item.) |
| 172 | + </para> |
| 173 | + </listitem> |
| 174 | + |
| 175 | + <listitem> |
| 176 | + <para> |
| 177 | + Any command line options and other startup options, including concerned |
| 178 | + environment variables or configuration files that you changed from the |
| 179 | + default. Again, be exact. If you are using a pre-packaged |
| 180 | + distribution that starts the database server at boot time, you should try |
| 181 | + to find out how that is done. |
| 182 | + </para> |
| 183 | + </listitem> |
| 184 | + |
| 185 | + <listitem> |
| 186 | + <para> |
| 187 | + Anything you did at all differently from the installation instructions. |
| 188 | + </para> |
| 189 | + </listitem> |
| 190 | + |
| 191 | + <listitem> |
| 192 | + <para> |
| 193 | + The PostgreSQL version. You can run the command |
| 194 | + <literal>SELECT version();</literal> to |
| 195 | + find out. If this function does not exist, say so, then we know that |
| 196 | + your version is old enough. If you can't start up the server or a |
| 197 | + client, look into the README file in the source directory or at the |
| 198 | + name of your distribution file or package name. If your version is older |
| 199 | + than 6.5 we will almost certainly tell you to upgrade. There are tons |
| 200 | + of bugs in old versions, that's why we write new ones. |
| 201 | + </para> |
| 202 | + <para> |
| 203 | + If you run a pre-packaged version, such as RPMs, say so, including any |
| 204 | + subversion the package may have. If you are talking about a CVS |
| 205 | + snapshot, mention that, including its date and time. |
| 206 | + </para> |
| 207 | + </listitem> |
| 208 | + |
| 209 | + <listitem> |
| 210 | + <para> |
| 211 | + Platform information. This includes the kernel name and version, C library, |
| 212 | + processor, memory information. In most cases it is sufficient to report |
| 213 | + the vendor and version, but do not assume everyone knows what exactly |
| 214 | + <quote>Debian</quote> contains or that everyone runs on Pentiums. If |
| 215 | + you have installation problems information about compilers, make, etc. |
| 216 | + is also necessary. |
| 217 | + </para> |
| 218 | + </listitem> |
| 219 | + </itemizedlist> |
| 220 | + |
| 221 | + Do not be afraid if your bug report becomes rather lengthy. That is a fact of life. |
| 222 | + It's better to report everything the first time than us having to squeeze the |
| 223 | + facts out of you. On the other hand, if your input files are huge, it is |
| 224 | + fair to ask first whether somebody is interested in looking into it. |
| 225 | + </para> |
| 226 | + |
| 227 | + <para> |
| 228 | + Do not spend all your time to figure out which changes in the input make |
| 229 | + the problem go away. This will probably not help solving it. If it turns |
| 230 | + out that the bug can't be fixed right away, you will still have time to |
| 231 | + find and share your work around. Also, once again, do not waste your time |
| 232 | + guessing why the bug exists. We'll find that out soon enough. |
| 233 | + </para> |
| 234 | + |
| 235 | + <para> |
| 236 | + When writing a bug report, please choose non-confusing terminology. |
| 237 | + The software package as such is called <quote>PostgreSQL</quote>, |
| 238 | + sometimes <quote>Postgres</quote> for short. (Sometimes |
| 239 | + the abbreviation <quote>Pgsql</quote> is used but don't do that.) When you |
| 240 | + are specifically talking about the backend server, mention that, don't |
| 241 | + just say <quote>Postgres crashes</quote>. The interactive frontend is called |
| 242 | + <quote>psql</quote> and is for all intends and purposes completely separate |
| 243 | + from the backend. |
| 244 | + </para> |
| 245 | + </Sect2> |
| 246 | + |
| 247 | + <Sect2> |
| 248 | + <title>Where to report bugs</title> |
| 249 | + |
| 250 | + <para> |
| 251 | + In general, send bug reports to <pgsql-bugs@postgresql.org>. You are |
| 252 | + invited to find a descriptive subject for your email message, perhaps parts |
| 253 | + of the error message. |
| 254 | + </para> |
| 255 | + |
| 256 | + <para> |
| 257 | + Do not send bug reports to any of the user mailing lists, such as |
| 258 | + pgsql-sql or pgsql-general. These mailing lists are for answering |
| 259 | + user questions, their subscribers normally do not wish to receive |
| 260 | + bug reports. More importantly, they are unlikely to fix them. |
| 261 | + </para> |
| 262 | + |
| 263 | + <para> |
| 264 | + Also, please do <emphasis>not</emphasis> send reports to |
| 265 | + <pgsql-hackers@postgresql.org>. This list is for discussing the |
| 266 | + development of <productname>PostgreSQL</productname>, it would be nice |
| 267 | + if we could keep the bug reports separate. We might choose take up a |
| 268 | + discussion |
| 269 | + about your bug report on it, if the bug needs more review. |
| 270 | + </para> |
| 271 | + |
| 272 | + <para> |
| 273 | + If you have a problem with the documentation, send email to |
| 274 | + <pgsql-docs@postgresql.org>. Refer to the document, chapter, and sections. |
| 275 | + </para> |
| 276 | + |
| 277 | + <para> |
| 278 | + If your bug is a portability problem on a non-supported platform, send |
| 279 | + mail to <pgsql-ports@postgresql.org>, so we (and you) can work on |
| 280 | + porting <productname>PostgreSQL</productname> to your platform. |
| 281 | + </para> |
| 282 | + |
| 283 | + <note> |
| 284 | + <para> |
| 285 | + Due to the unfortunate amount of spam going around, all of the above |
| 286 | + email addresses are closed mailing lists. That is, you need to be |
| 287 | + subscribed to them in order to be allowed to post. If you simply |
| 288 | + want to send mail but do not want to receive list traffic, you can |
| 289 | + subscribe to the special pgsql-loophole <quote>list</quote>, which |
| 290 | + allows you to post to all <productname>PostgreSQL</productname> |
| 291 | + mailing lists without receiving any messages. Send email to |
| 292 | + <pgsql-loophole-request@postgresql.org> to subscribe. |
| 293 | + </para> |
| 294 | + </note> |
| 295 | + </Sect2> |
| 296 | +</Sect1> |
0 commit comments