Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
63f1ccd8
Commit
63f1ccd8
authored
Sep 04, 2012
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove src/tool/backend, now that the content is on the web site and wiki.
parent
2042185b
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
0 additions
and
651 deletions
+0
-651
src/tools/backend/README
src/tools/backend/README
+0
-4
src/tools/backend/backend_dirs.html
src/tools/backend/backend_dirs.html
+0
-349
src/tools/backend/flow.fig
src/tools/backend/flow.fig
+0
-143
src/tools/backend/flow.gif
src/tools/backend/flow.gif
+0
-0
src/tools/backend/index.html
src/tools/backend/index.html
+0
-155
No files found.
src/tools/backend/README
deleted
100644 → 0
View file @
2042185b
src/tools/backend/README
Just point your browser at the index.html file, and click on the
flowchart to see the description and source code.
src/tools/backend/backend_dirs.html
deleted
100644 → 0
View file @
2042185b
This diff is collapsed.
Click to expand it.
src/tools/backend/flow.fig
deleted
100644 → 0
View file @
2042185b
#FIG 3.2 Produced by xfig version 3.2.5
Portrait
Center
Inches
Letter
88.00
Single
-2
1200 2
0 32 #919191
0 33 #c5ddc1
2 4 0 1 -1 26 1 0 20 0.000 0 0 7 0 0 5
3600 900 1200 900 1200 300 3600 300 3600 900
2 4 0 1 -1 4 1 0 20 0.000 0 0 7 0 0 5
3600 2100 1200 2100 1200 1500 3600 1500 3600 2100
2 4 0 1 -1 0 1 0 20 0.000 0 0 7 0 0 5
7500 1500 5100 1500 5100 900 7500 900 7500 1500
2 4 0 1 -1 31 1 0 20 0.000 0 0 7 0 0 5
3600 3300 1200 3300 1200 2700 3600 2700 3600 3300
2 4 0 1 -1 8 1 0 20 0.000 0 0 7 0 0 5
3600 6000 1200 6000 1200 5400 3600 5400 3600 6000
2 4 0 1 -1 31 1 0 20 0.000 0 0 7 0 0 5
7500 3300 5100 3300 5100 2700 7500 2700 7500 3300
2 4 0 1 -1 8 1 0 20 0.000 0 0 7 0 0 5
3600 8400 1200 8400 1200 7800 3600 7800 3600 8400
2 4 0 1 -1 8 1 0 20 0.000 0 0 7 0 0 5
3600 9600 1200 9600 1200 9000 3600 9000 3600 9600
2 1 2 2 -1 7 0 0 -1 3.000 0 1 -1 1 1 2
0 0 2.00 80.00 150.00
0 0 2.00 80.00 150.00
4500 1425 5135 1194
2 1 2 2 -1 7 0 0 -1 4.000 0 1 -1 1 1 2
0 0 2.00 80.00 150.00
0 0 2.00 80.00 150.00
4725 2025 5160 1467
2 1 0 2 20 7 1 0 -1 0.000 0 0 -1 1 0 2
0 0 2.00 150.00 180.00
2400 2100 2400 2700
2 1 0 2 31 7 1 0 -1 0.000 0 0 -1 1 0 2
0 0 2.00 150.00 180.00
2400 3300 2400 4275
2 4 0 1 -1 8 1 0 20 0.000 0 0 7 0 0 5
3600 7200 1200 7200 1200 6600 3600 6600 3600 7200
2 4 0 1 -1 8 1 0 20 0.000 0 0 7 0 0 5
3600 10800 1200 10800 1200 10200 3600 10200 3600 10800
2 4 0 1 -1 8 1 0 20 0.000 0 0 7 0 0 5
3600 4800 1200 4800 1200 4200 3600 4200 3600 4800
2 1 1 2 32 7 1 0 -1 4.000 0 0 -1 1 0 2
0 0 2.00 150.00 180.00
2400 8400 2400 9000
2 1 1 2 32 7 1 0 -1 4.000 0 0 -1 1 0 2
0 0 2.00 150.00 180.00
2400 7200 2400 7800
2 1 1 2 32 7 1 0 -1 4.000 0 0 -1 1 0 2
0 0 2.00 150.00 180.00
2400 6000 2400 6600
2 1 1 2 32 7 1 0 -1 4.000 0 0 -1 1 0 2
0 0 2.00 150.00 180.00
2400 4800 2400 5400
2 1 1 2 32 7 1 0 -1 4.000 0 0 -1 1 0 2
0 0 2.00 150.00 180.00
3600 5700 5100 5700
2 1 0 2 25 7 0 0 -1 0.000 0 0 -1 1 0 2
0 0 2.00 150.00 180.50
2400 900 2400 1500
2 4 0 1 -1 8 1 0 20 0.000 0 0 7 0 0 5
7500 6000 5100 6000 5100 5400 7500 5400 7500 6000
2 4 0 1 33 33 3 0 20 0.000 0 0 40 0 0 5
8700 11100 300 11100 300 3600 8700 3600 8700 11100
2 1 0 2 29 7 0 0 -1 0.000 0 0 -1 1 1 2
0 0 2.00 150.00 180.00
0 0 2.00 150.00 180.00
3150 13050 3150 13650
2 1 0 2 29 7 0 0 -1 0.000 0 0 -1 1 1 2
0 0 2.00 150.00 180.00
0 0 2.00 150.00 180.00
1500 12450 1500 11850
2 4 0 1 -1 29 1 0 20 0.000 0 0 7 0 0 5
2700 13050 300 13050 300 12450 2700 12450 2700 13050
2 4 0 1 -1 29 1 0 20 0.000 0 0 7 0 0 5
6000 13050 3600 13050 3600 12450 6000 12450 6000 13050
2 4 0 1 -1 29 1 0 20 0.000 0 0 7 0 0 5
7500 14250 5100 14250 5100 13650 7500 13650 7500 14250
2 4 0 1 -1 29 1 0 20 0.000 0 0 7 0 0 5
4200 14250 1800 14250 1800 13650 4200 13650 4200 14250
2 1 0 2 29 7 0 0 -1 0.000 0 0 -1 1 1 2
0 0 2.00 150.00 180.00
0 0 2.00 150.00 180.00
4800 12450 4800 11850
2 1 0 2 29 7 0 0 -1 0.000 0 0 -1 1 1 2
0 0 2.00 150.00 180.00
0 0 2.00 150.00 180.00
6300 13050 6300 13650
2 4 0 1 -1 29 1 0 20 0.000 0 0 7 0 0 5
9300 13050 6600 13050 6600 12450 9300 12450 9300 13050
2 1 0 2 29 7 0 0 -1 0.000 0 0 -1 1 1 2
0 0 2.00 150.00 180.00
0 0 2.00 150.00 180.00
7950 11850 7950 12450
2 1 1 2 5 7 1 0 -1 4.000 0 0 -1 1 0 2
0 0 2.00 150.00 180.00
2400 6000 2400 6600
2 1 1 2 32 7 1 0 -1 4.000 0 0 -1 1 0 2
0 0 2.00 150.00 180.00
2400 9600 2400 10200
3 2 2 2 20 7 0 0 -1 6.000 1 1 0 5
0 0 2.00 150.00 180.00
2415 2140 3090 2440 5265 2515 6090 2590 6315 2740
0.000 -1.000 -1.000 -1.000 0.000
3 0 1 2 32 7 1 0 -1 4.500 0 1 0 7
0 0 2.00 150.00 150.00
7500 5700 8400 5400 8400 4500 7800 3900 3600 3900 3000 3900
2700 4200
0.000 1.000 1.000 1.000 1.000 1.000 0.000
3 0 1 2 32 7 0 0 -1 4.000 0 1 0 8
0 0 2.00 150.00 150.00
1125 10500 900 10350 675 9975 675 4350 900 3975 1350 3900
1800 3900 2100 4200
0.000 1.000 1.000 1.000 1.000 1.000 1.000 0.000
4 1 5 2 0 28 18 0.0000 4 285 870 4350 5625 utility\001
4 1 -1 0 0 16 18 0.0000 4 210 1455 2400 1950 Postmaster\001
4 1 -1 0 0 16 18 0.0000 4 270 1125 2400 3150 Postgres\001
4 1 -1 0 0 16 18 0.0000 4 270 1125 6300 3150 Postgres\001
4 1 7 0 0 16 18 0.0000 4 270 720 6300 1350 Libpq\001
4 1 -1 0 0 16 18 0.0000 4 210 615 2400 750 Main\001
4 1 7 0 0 16 18 0.0000 4 210 1815 2400 9450 Generate Plan\001
4 1 7 0 0 16 18 0.0000 4 270 1440 2400 5850 Traffic Cop\001
4 1 7 0 0 16 18 0.0000 4 210 1980 2400 8250 Generate Paths\001
4 1 5 2 0 28 18 0.0000 4 225 615 2400 9900 Plan\001
4 1 5 2 0 28 18 0.0000 4 285 1920 2400 8700 Optimal Path\001
4 1 5 2 0 28 18 0.0000 4 285 900 2400 6300 Query\001
4 1 7 0 0 16 18 0.0000 4 210 1680 2400 10650 Execute Plan\001
4 0 5 0 0 16 12 0.0000 4 210 2640 5250 6300 e.g. CREATE TABLE, COPY\001
4 1 5 0 0 16 12 0.0000 4 195 3540 2400 6525 SELECT, INSERT, UPDATE, DELETE\001
4 1 7 0 0 16 18 0.0000 4 270 1800 2400 7050 Rewrite Query\001
4 1 7 0 0 16 18 0.0000 4 210 2130 2400 4650 Parse Statement\001
4 1 7 0 0 16 18 0.0000 4 270 720 6300 5700 Utility\001
4 1 7 0 0 16 18 0.0000 4 210 1335 6300 6000 Command\001
4 1 -1 0 0 16 18 0.0000 4 270 2355 7950 12900 Storage Managers\001
4 1 -1 0 0 16 18 0.0000 4 270 1020 4800 12900 Catalog\001
4 1 -1 0 0 16 18 0.0000 4 210 915 1500 12900 Utilities\001
4 1 -1 0 0 16 18 0.0000 4 210 2085 3000 14100 Access Methods\001
4 1 -1 0 0 16 18 0.0000 4 210 1635 6300 14100 Nodes / Lists\001
src/tools/backend/flow.gif
deleted
100644 → 0
View file @
2042185b
489 KB
src/tools/backend/index.html
deleted
100644 → 0
View file @
2042185b
<!-- src/tools/backend/index.html -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns=
"http://www.w3.org/1999/xhtml"
>
<head>
<meta
name=
"generator"
content=
"HTML Tidy for BSD/OS (vers 1st July 2002), see www.w3.org"
/>
<title>
How PostgreSQL Processes a Query
</title>
</head>
<body
bgcolor=
"#FFFFFF"
text=
"#000000"
link=
"#FF0000"
vlink=
"#A00000"
alink=
"#0000FF"
>
<h1>
How PostgreSQL Processes a Query
</h1>
<h2>
by Bruce Momjian
</h2>
<center>
<h3><i>
Click on an item
</i>
to see more detail or look at the full
<a
href=
"backend_dirs.html"
>
index.
</a></h3>
<p><img
src=
"flow.gif"
usemap=
"#flowmap"
alt=
"flowchart"
/>
<map
name=
"flowmap"
id=
"flowmap"
>
<area
coords=
"45, 0, 175, 30"
href=
"backend_dirs.html#main"
alt=
"main"
/>
<area
coords=
"255, 35, 380, 65"
href=
"backend_dirs.html#libpq"
alt=
"libpq"
/>
<area
coords=
"45, 65, 175, 95"
href=
"backend_dirs.html#postmaster"
alt=
"postmaster"
/>
<area
coords=
"45, 130, 175, 160"
href=
"backend_dirs.html#tcop"
alt=
"tcop"
/>
<area
coords=
"250, 130, 380, 160"
href=
"backend_dirs.html#tcop"
alt=
"tcop"
/>
<area
coords=
"45, 205, 175, 240"
href=
"backend_dirs.html#parser"
alt=
"parser"
/>
<area
coords=
"45, 270, 175, 300"
href=
"backend_dirs.html#tcop"
alt=
"tcop"
/>
<area
coords=
"255, 270, 380, 300"
href=
"backend_dirs.html#commands"
alt=
"commands"
/>
<area
coords=
"45, 335, 175, 365"
href=
"backend_dirs.html#rewrite"
alt=
"rewrite"
/>
<area
coords=
"45, 400, 175, 430"
href=
"backend_dirs.html#optimizer_path"
alt=
"path"
/>
<area
coords=
"45, 460, 175, 490"
href=
"backend_dirs.html#optimizer_plan"
alt=
"plan"
/>
<area
coords=
"45, 525, 175, 555"
href=
"backend_dirs.html#executor"
alt=
"executor"
/>
<area
coords=
"0, 640, 130, 675"
href=
"backend_dirs.html#utils"
alt=
"utils"
/>
<area
coords=
"175, 640, 300, 675"
href=
"backend_dirs.html#catalog"
alt=
"catalog"
/>
<area
coords=
"330, 640, 475, 675"
href=
"backend_dirs.html#storage"
alt=
"storage"
/>
<area
coords=
"75, 700, 210, 735"
href=
"backend_dirs.html#access"
alt=
"access"
/>
<area
coords=
"255, 705, 380, 735"
href=
"backend_dirs.html#nodes"
alt=
"nodes"
/>
</map>
</center>
<br
/>
<p>
A query comes to the backend via data packets arriving through
TCP/IP or Unix Domain sockets. It is loaded into a string, and
passed to the
<a
href=
"../../backend/parser"
>
parser,
</a>
where the
lexical scanner,
<a
href=
"../../backend/parser/scan.l"
>
scan.l,
</a>
breaks the query up into tokens(words). The parser uses
<a
href=
"../../backend/parser/gram.y"
>
gram.y
</a>
and the tokens to
identify the query type, and load the proper query-specific
structure, like
<a
href=
"../../include/nodes/parsenodes.h"
>
CreateStmt
</a>
or
<a
href=
"../../include/nodes/parsenodes.h"
>
SelectStmt.
</a></p>
<p>
The statement is then identified as complex (
<i>
SELECT / INSERT /
UPDATE / DELETE
</i>
) or a simple, e.g
<i>
CREATE USER, ANALYZE,
</i>
,
etc. Simple utility commands are processed by statement-specific
functions in
<a
href=
"../../backend/commands"
>
backend/commands.
</a>
Complex statements require more handling.
</p>
<p>
The parser takes a complex query, and creates a
<a
href=
"../../include/nodes/parsenodes.h"
>
Query
</a>
structure that
contains all the elements used by complex queries. Query.qual holds
the
<i>
WHERE
</i>
clause qualification, which is filled in by
<a
href=
"../../backend/parser/parse_clause.c"
>
transformWhereClause().
</a>
Each table referenced in the query is represented by a
<a
href=
"../../include/nodes/parsenodes.h"
>
RangeTableEntry,
</a>
and
they are linked together to form the
<i>
range table
</i>
of the
query, which is generated by
<a
href=
"../../backend/parser/parse_clause.c"
>
transformFromClause().
</a>
Query.rtable holds the query's range table.
</p>
<p>
Certain queries, like
<i>
SELECT,
</i>
return columns of data.
Other queries, like
<i>
INSERT
</i>
and
<i>
UPDATE,
</i>
specify the
columns modified by the query. These column references are
converted to
<a
href=
"../../include/nodes/primnodes.h"
>
TargetEntry
</a>
entries,
which are linked together to make up the
<i>
target list
</i>
of the
query. The target list is stored in Query.targetList, which is
generated by
<a
href=
"../../backend/parser/parse_target.c"
>
transformTargetList().
</a></p>
<p>
Other query elements, like aggregates(
<i>
SUM()
</i>
),
<i>
GROUP
BY,
</i>
and
<i>
ORDER BY
</i>
are also stored in their own Query
fields.
</p>
<p>
The next step is for the Query to be modified by any
<i>
VIEWS
</i>
or
<i>
RULES
</i>
that may apply to the query. This is
performed by the
<a
href=
"../../backend/rewrite"
>
rewrite
</a>
system.
</p>
<p>
The
<a
href=
"../../backend/optimizer"
>
optimizer
</a>
takes the
Query structure and generates an optimal
<a
href=
"../../include/nodes/plannodes.h"
>
Plan,
</a>
which contains the
operations to be performed to execute the query. The
<a
href=
"../../backend/optimizer/path"
>
path
</a>
module determines the
best table join order and join type of each table in the
RangeTable, using Query.qual(
<i>
WHERE
</i>
clause) to consider
optimal index usage.
</p>
<p>
The Plan is then passed to the
<a
href=
"../../backend/executor"
>
executor
</a>
for execution, and the
result returned to the client. The Plan is actually as set of nodes,
arranged in a tree structure with a top-level node, and various
sub-nodes as children.
</p>
<p>
There are many other modules that support this basic
functionality. They can be accessed by clicking on the
flowchart.
</p>
<hr
/>
<p>
Another area of interest is the shared memory area, which
contains data accessible to all backends. It has recently used
data/index blocks, locks, backend process information, and lookup
tables for these structures:
</p>
<ul>
<li>
ShmemIndex - lookup shared memory addresses using structure
names
</li>
<li><a
href=
"../../include/storage/buf_internals.h"
>
Buffer
Descriptor
</a>
- control header for buffer cache block
</li>
<li><a
href=
"../../include/storage/buf_internals.h"
>
Buffer
Block
</a>
- data/index buffer cache block
</li>
<li>
Shared Buffer Lookup Table - lookup of buffer cache block
addresses using table name and block number(
<a
href=
"../../include/storage/buf_internals.h"
>
BufferTag
</a>
)
</li>
<li>
Lock Manager Tables (lock hash) - the
<a
href=
"../../include/storage/lock.h"
>
LOCK
</a>
structure, looked up
using a
<a
href=
"../../include/storage/lock.h"
>
LOCKTAG
</a>
.
A LOCK structure exists for each lockable object that is currently
locked by any backend. Also, there is a subsidiary
<a
href=
"../../include/storage/lock.h"
>
PROCLOCK
</a>
structure for each
backend currently interested in a given LOCK
</li>
<li><a
href=
"../../include/storage/proc.h"
>
PGPROC Structures
</a>
-
information about each backend, including locks held/waiting
</li>
</ul>
<p>
Each data structure is created by calling
<a
href=
"../../backend/storage/ipc/shmem.c"
>
ShmemInitStruct(),
</a>
and
the lookups are created by
<a
href=
"../../backend/storage/ipc/shmem.c"
>
ShmemInitHash().
</a></p>
<hr
/>
<small>
Maintainer: Bruce Momjian (
<a
href=
"mailto:pgman@candle.pha.pa.us"
>
pgman@candle.pha.pa.us
</a>
)
<br
/>
Last updated: Fri May 6 14:22:27 EDT 2005
</small>
</body>
</html>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment