author | Bruce Momjian | |
Wed, 1 Dec 2004 17:21:58 +0000 (17:21 +0000) | ||
committer | Bruce Momjian | |
Wed, 1 Dec 2004 17:21:58 +0000 (17:21 +0000) |
doc/FAQ_DEV | patch | blob | blame | history | |
doc/src/FAQ/FAQ_DEV.html | patch | blob | blame | history |
Last updated: Wed Dec 1 16:11:11 EST 2006
Current maintainer: Bruce Momjian (
The most recent version of this document can be viewed at
Download the code and have a look around. See
Subscribe to and read the
PostgreSQL is developed mostly in the C programming language. It The source code is targeted at most of the popular Unix Most developers make use of the open source development tool Developers using this tool chain on Windows make use of MingW Some developers use compilers from other software vendors with Developers who are regularly rebuilding the source often pass You can learn more about these features by consulting the Send an email to pgsql-hackers with a proposal for what you want Other than documentation in the source tree itself, you can find Generate the patch in contextual diff format. If you are Ensure that your patch is generated against the most recent Finally, submit the patch to [email protected]. It There are several ways to obtain the source tree. Occasional Last updated: Sat Nov 27 01:02:35 EST 2004 Current maintainer: Bruce Momjian (
The most recent version of this document can be viewed at
This was written by Lamar Owen: 2001-06-22 Read HACKERS for six months (or a full release cycle, whichever Developers Corner on the The TODO list. You've made the first step, by finding and subscribing to Discussion on the patch typically happens here. If the patch Once your contributions get accepted, things move from there. I make these statements from having watched the process for over To see a good example of how one goes about this, search the The source code is over 350,000 lines. Many fixes/features Another thing to keep in mind is that many fixes and features When adding code, keep in mind that it should use the existing The usual process for source additions is: There are several ways to obtain the source tree. Occasional To update the source tree, there are two ways. You can generate For hard-core developers, Marc([email protected]) will give First, use psql to make sure it is working as you expect. Aside from the User documentation mentioned in the regular FAQ, Regular developers may want to take advantage of anonymous Basic system testing The easiest way to test your code is to ensure that it builds It is worth advised that you pass --enable-cassert to Then, perform run time testing via psql. Regression test suite The next step is to test your changes against the existing If you've deliberately changed existing behaviour, this change Other run time testing Some developers make use of tools such as valgrind (
What about unit testing, static analysis, model There have been a number of discussions about other testing First, all the files in the src/tools directory are Second, you really should have an editor that can handle tags, Third, you need to get id-utils from: make_diff has tools to create patch diff files that can Our standard format is to indent each code level with one tab, In src/include/catalog: Second, you really should have an editor that can handle tags, Third, you need to get id-utils from
By running tools/make_mkid, an archive of source symbols Some developers make use of cscope, which can be found at
tools/make_diff has tools to create patch diff files that Our standard format is to indent each code level with one tab, pgindent is run on all source files just before each beta pginclude contains scripts used to add needed When adding system types, you will need to assign oids to them. I have four good books, An Introduction to Database There is also a database performance site, with a handbook The files configure and configure.in are part of When configure is run by the user, it tests various OS When you need to edit files, make sure you don't waste time There are a variety of places that need to be modified to add a Then, check src/include/port and add your new OS file, There is always a temptation to use the newest operating system First, we support 15+ operating systems, so any new feature has As an example, threads are not currently used in the backend code So, we are not ignorant of new features. It is just that This was written by Lamar Owen: 2001-05-03 As to how the RPMs are built -- to answer that question sanely I then download and build on as many different canonical I test the build by installing the resulting packages and You'll notice I said 'canonical' distributions above. That For a time I built on Mandrake for RedHat consumption -- no I _do_ attempt to make the _source_ RPM compatible with as many And, while I understand people's desire to immediately upgrade I am working towards a more open RPM distribution -- I would As to why all these files aren't part of the source tree, well, Of course, there are many projects that DO include all the files This was written by Tom Lane: 2001-05-07 If you just do basic "cvs checkout", "cvs update", "cvs commit", The first thing you have to know is the branch name for the pgindent is run on all source files just before each beta pginclude contains scripts used to add needed When adding system types, you will need to assign oids to them. I have four good books, An Introduction to Database There is also a database performance site, with a handbook The files configure and configure.in are part of When configure is run by the user, it tests various OS When you need to edit files, make sure you don't waste time There are a variety of places that need to be modified to add a Then, check src/include/port and add your new OS file, There is always a temptation to use the newest operating system First, we support 15+ operating systems, so any new feature has As an example, threads are not currently used in the backend So, we are not ignorant of new features. It is just that we are This was written by Lamar Owen: 2001-05-03 As to how the RPMs are built -- to answer that question sanely I then download and build on as many different canonical I test the build by installing the resulting packages and You'll notice I said 'canonical' distributions above. That For a time I built on Mandrake for RedHat consumption -- no I _do_ attempt to make the _source_ RPM compatible with as many And, while I understand people's desire to immediately upgrade I am working towards a more open RPM distribution -- I would As to why all these files aren't part of the source tree, well, Of course, there are many projects that DO include all the files This was written by Tom Lane: 2001-05-07 If you just do basic "cvs checkout", "cvs update", "cvs commit", The first thing you have to know is the branch name for the OK, so how do you do work on a branch? By far the best way is to Normally, to checkout the head branch, you just cd to the place OK, so how do you do work on a branch? By far the best way is to Normally, to checkout the head branch, you just cd to the place To get a past branch, you cd to whereever you want it and To get a past branch, you cd to whereever you want it and For example, just a couple days ago I did For example, just a couple days ago I did and now I have a maintenance copy of 7.1.*. When you've done a checkout in this way, the branch name is So, if you have a patch that needs to apply to both the head and There are three versions of the SQL standard: SQL-92, SQL:1999, Some SQL standards web pages are: PostgreSQL website development is discussed on the You first need to find the tuples(rows) you are interested in. The rows returned are cache-owned versions of the heap rows. If you can't use the system cache, you will need to retrieve the Open the table with heap_open(). You can then start a You can also use heap_fetch() to fetch rows by block Once you have the row, you can get data that is common to all Table, column, type, function, and view names are stored in and now I have a maintenance copy of 7.1.*. When you've done a checkout in this way, the branch name is So, if you have a patch that needs to apply to both the head and There are three versions of the SQL standard: SQL-92, SQL:1999, Some SQL standards web pages are: Many technical questions held by those new to the code have been If you cannot find discussion or your particular question, feel Major contributors also answer technical questions, including PostgreSQL website development is discussed on the You first need to find the tuples(rows) you are interested in. The rows returned are cache-owned versions of the heap rows. If you can't use the system cache, you will need to retrieve the Open the table with heap_open(). You can then start a You can also use heap_fetch() to fetch rows by block Once you have the row, you can get data that is common to all Table, column, type, function, and view names are stored in Many functions are called with both types of names, ie. We do this because this allows a consistent way to pass data Here are some of the List manipulation commands: Many functions are called with both types of names, ie. We do this because this allows a consistent way to pass data Here are some of the List manipulation commands: The structures passing around from the parser, rewrite, palloc() and pfree() are used in place of malloc() ereport() is used to send messages to the front-end, and ereport(ERROR) frees most memory and open file descriptors so Normally, transactions can not see the rows they modify. This However, there are cases where a transactions needs to see rows The structures passing around from the parser, rewrite, palloc() and pfree() are used in place of malloc() ereport() is used to send messages to the front-end, and ereport(ERROR) frees most memory and open file Normally, transactions can not see the rows they modify. This However, there are cases where a transactions needs to see rowsGeneral Questions
Technical Questions
General Questions
1.1) How go I get involved in PostgreSQL
1.2) What development environment is required
1.3) What areas need work?
1.4) What do I do after choosing an item to
1.5) Where can I learn more about the
1.6) I've developed a patch, what next?
1.7) How do I download/update the current
Developer's Frequently Asked Questions (FAQ) for
General Questions
Technical Questions
General Questions
1.1) How go I get involved in PostgreSQL
1.2) How do I add a feature or fix a bug?
1.3) How do I download/update the current source
1.4) How do I test my changes?
1.5) What tools are available for
1.8) How do I test my changes?
1.9) What tools are available for
/*------
. These comments will not be reformatted in#include
's to include files, and removed unneeded#include
's.1.6) What books are good for developers?
1.7) What is configure all about?
1.8) How do I add a new port?
1.9) Why don't you use threads/raw
1.10) How are RPM's packaged?
1.11) How are CVS branches managed?
/*------
. These comments will not be reformatted in#include
's to include files, and removed unneeded#include
's.1.10) What books are good for
1.11) What is configure all about?
1.12) How do I add a new port?
1.13) Why don't you use threads/raw
1.14) How are RPMs packaged?
1.15) How are CVS branches managed?
1.12) Where can I get a copy of the SQL
1.13) How go I get involved in PostgreSQL
Technical Questions
2.1) How do I efficiently access information in
((Form_pg_class) GETSTRUCT(tuple))->relnatts
2.2) Why are table, column, type, function, view
typedef struct nameData
1.16) Where can I get a copy of the SQL
1.17) Where can I get technical
1.18) How go I get involved in PostgreSQL
Technical Questions
2.1) How do I efficiently access information
((Form_pg_class) GETSTRUCT(tuple))->relnatts
2.2) Why are table, column, type, function,
typedef struct nameData
2.3) Why do we use Node and List to
List *i, *list;
2.3) Why do we use Node and
List *list;
(gdb) set print elements 0
(gdb) call print(any_pointer)
(gdb) set print elements 0
(gdb) call print(any_pointer)
2.4) I just added a field to a structure. What
2.5) Why do we use palloc() and
2.6) What is ereport()?
2.7) What is CommandCounterIncrement()?
UPDATE foo SET x = x + 1
to work correctly.2.4) I just added a field to a structure.
2.5) Why do we use palloc() and
2.6) What is ereport()?
2.7) What is CommandCounterIncrement()?
UPDATE foo SET x = x + 1
to work correctly.