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
e7cad7b0
Commit
e7cad7b0
authored
Sep 23, 1999
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add TRUNCATE command, with psql help and sgml additions.
parent
abd4bf13
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
497 additions
and
44 deletions
+497
-44
doc/src/sgml/ref/truncate.sgml
doc/src/sgml/ref/truncate.sgml
+133
-0
src/backend/catalog/heap.c
src/backend/catalog/heap.c
+231
-1
src/backend/commands/creatinh.c
src/backend/commands/creatinh.c
+21
-1
src/backend/parser/gram.y
src/backend/parser/gram.y
+19
-4
src/backend/parser/keywords.c
src/backend/parser/keywords.c
+2
-1
src/backend/tcop/utility.c
src/backend/tcop/utility.c
+33
-1
src/backend/utils/mmgr/portalmem.c
src/backend/utils/mmgr/portalmem.c
+3
-1
src/bin/psql/psqlHelp.h
src/bin/psql/psqlHelp.h
+33
-29
src/include/catalog/heap.h
src/include/catalog/heap.h
+2
-1
src/include/commands/creatinh.h
src/include/commands/creatinh.h
+2
-1
src/include/nodes/nodes.h
src/include/nodes/nodes.h
+2
-1
src/include/nodes/parsenodes.h
src/include/nodes/parsenodes.h
+11
-1
src/include/storage/bufmgr.h
src/include/storage/bufmgr.h
+2
-1
src/include/utils/portal.h
src/include/utils/portal.h
+2
-1
src/tools/pgindent/pgindent
src/tools/pgindent/pgindent
+1
-0
No files found.
doc/src/sgml/ref/truncate.sgml
0 → 100644
View file @
e7cad7b0
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/truncate.sgml,v 1.1 1999/09/23 17:02:28 momjian Exp $
Postgres documentation
-->
<refentry id="SQL-TRUNCATE">
<refmeta>
<refentrytitle id="SQL-TRUNCATE-TITLE">
TRUNCATE
</refentrytitle>
<refmiscinfo>SQL - Language Statements</refmiscinfo>
</refmeta>
<refnamediv>
<refname>
TRUNCATE
</refname>
<refpurpose>
Close a cursor
</refpurpose>
</refnamediv>
<refsynopsisdiv>
<refsynopsisdivinfo>
<date>1999-07-20</date>
</refsynopsisdivinfo>
<synopsis>
TRUNCATE TABLE <replaceable class="PARAMETER">table</replaceable>
</synopsis>
<refsect2 id="R2-SQL-TRUNCATE-1">
<refsect2info>
<date>1998-09-08</date>
</refsect2info>
<title>
Inputs
</title>
<para>
<variablelist>
<varlistentry>
<term><replaceable class="PARAMETER">table</replaceable></term>
<listitem>
<para>
The table name to truncate.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect2>
<refsect2 id="R2-SQL-TRUNCATE-2">
<refsect2info>
<date>1998-09-08</date>
</refsect2info>
<title>
Outputs
</title>
<para>
<variablelist>
<varlistentry>
<term><computeroutput>
TRUNCATE
</computeroutput></term>
<listitem>
<para>
Message returned if the table is successfully truncated.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect2>
</refsynopsisdiv>
<refsect1 id="R1-SQL-TRUNCATE-1">
<refsect1info>
<date>1998-09-08</date>
</refsect1info>
<title>
Description
</title>
<para>
<command>TRUNCATE</command> quickly removes all rows from a table.
</para>
<refsect1 id="R1-SQL-TRUNCATE-2">
<title>
Usage
</title>
<para>
Truncate the table bigtable.
</para>
<programlisting>
TRUNCATE TABLE bigtable;
</programlisting>
</refsect1>
<refsect1 id="R1-SQL-TRUNCATE-3">
<title>
Compatibility
</title>
<refsect2 id="R2-SQL-TRUNCATE-4">
<refsect2info>
<date>1998-09-08</date>
</refsect2info>
<title>
SQL92
</title>
<para>
There is no <command>TRUNCATE</command> in <acronym>SQL92</acronym>.
</para>
</refsect2>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:"/usr/lib/sgml/catalog"
sgml-local-ecat-files:nil
End:
-->
src/backend/catalog/heap.c
View file @
e7cad7b0
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.9
6 1999/09/18 19:06:33 tgl
Exp $
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.9
7 1999/09/23 17:02:34 momjian
Exp $
*
*
* INTERFACE ROUTINES
...
...
@@ -30,6 +30,7 @@
#include "miscadmin.h"
#include "access/heapam.h"
#include "access/genam.h"
#include "access/xact.h"
#include "catalog/catalog.h"
#include "catalog/catname.h"
...
...
@@ -40,6 +41,7 @@
#include "catalog/pg_index.h"
#include "catalog/pg_inherits.h"
#include "catalog/pg_ipl.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_relcheck.h"
#include "commands/trigger.h"
#include "optimizer/tlist.h"
...
...
@@ -49,6 +51,7 @@
#include "storage/smgr.h"
#include "tcop/tcopprot.h"
#include "utils/builtins.h"
#include "utils/portal.h"
#include "utils/relcache.h"
#include "utils/syscache.h"
#include "utils/temprel.h"
...
...
@@ -1056,6 +1059,233 @@ DeleteRelationTuple(Relation rel)
heap_close
(
pg_class_desc
,
RowExclusiveLock
);
}
/* --------------------------------
* RelationTruncateIndexes - This routine is used to truncate all
* indices associated with the heap relation to zero tuples.
* The routine will truncate and then reconstruct the indices on
* the relation specified by the heapRelation parameter.
* --------------------------------
*/
static
void
RelationTruncateIndexes
(
Relation
heapRelation
)
{
Relation
indexRelation
,
currentIndex
;
ScanKeyData
entry
;
HeapScanDesc
scan
;
HeapTuple
indexTuple
,
procTuple
,
classTuple
;
Form_pg_index
index
;
Oid
heapId
,
indexId
,
procId
,
accessMethodId
;
Node
*
oldPred
=
NULL
;
PredInfo
*
predInfo
;
List
*
cnfPred
=
NULL
;
AttrNumber
*
attributeNumberA
;
FuncIndexInfo
fInfo
,
*
funcInfo
=
NULL
;
int
i
,
numberOfAttributes
;
char
*
predString
;
/*** Save the id of the heap relation ***/
heapId
=
RelationGetRelid
(
heapRelation
);
/*** Open the System relation, pg_index ***/
indexRelation
=
heap_openr
(
IndexRelationName
);
/*** Scan pg_index For indexes related to heap relation ***/
ScanKeyEntryInitialize
(
&
entry
,
0x0
,
Anum_pg_index_indrelid
,
F_OIDEQ
,
ObjectIdGetDatum
(
heapId
));
scan
=
heap_beginscan
(
indexRelation
,
false
,
SnapshotNow
,
1
,
&
entry
);
while
(
HeapTupleIsValid
(
indexTuple
=
heap_getnext
(
scan
,
0
)))
{
/*** For each index, fetch index attributes ***/
index
=
(
Form_pg_index
)
GETSTRUCT
(
indexTuple
);
indexId
=
index
->
indexrelid
;
procId
=
index
->
indproc
;
for
(
i
=
0
;
i
<
INDEX_MAX_KEYS
;
i
++
)
{
if
(
index
->
indkey
[
i
]
==
InvalidAttrNumber
)
break
;
}
numberOfAttributes
=
i
;
/*** If a valid where predicate, compute predicate Node ***/
if
(
VARSIZE
(
&
index
->
indpred
)
!=
0
)
{
predString
=
fmgr
(
F_TEXTOUT
,
&
index
->
indpred
);
oldPred
=
stringToNode
(
predString
);
pfree
(
predString
);
}
predInfo
=
(
PredInfo
*
)
palloc
(
sizeof
(
PredInfo
));
predInfo
->
pred
=
(
Node
*
)
cnfPred
;
/* predInfo->pred = (Node *) oldPred; */
predInfo
->
oldPred
=
oldPred
;
/*** Assign Index keys to attributes array ***/
attributeNumberA
=
(
AttrNumber
*
)
palloc
(
numberOfAttributes
*
sizeof
(
attributeNumberA
[
0
]));
for
(
i
=
0
;
i
<
numberOfAttributes
;
i
++
)
{
attributeNumberA
[
i
]
=
index
->
indkey
[
i
];
}
/*** If this is a procedural index, initialize our FuncIndexInfo ***/
if
(
procId
!=
InvalidOid
)
{
funcInfo
=
&
fInfo
;
FIsetnArgs
(
funcInfo
,
numberOfAttributes
);
procTuple
=
SearchSysCacheTuple
(
PROOID
,
ObjectIdGetDatum
(
procId
),
0
,
0
,
0
);
if
(
!
HeapTupleIsValid
(
procTuple
))
{
elog
(
ERROR
,
"RelationTruncateIndexes: index procedure not found"
);
}
namecpy
(
&
(
funcInfo
->
funcName
),
&
(((
Form_pg_proc
)
GETSTRUCT
(
procTuple
))
->
proname
));
FIsetProcOid
(
funcInfo
,
procTuple
->
t_data
->
t_oid
);
}
/*** Fetch the classTuple associated with this index ***/
classTuple
=
SearchSysCacheTupleCopy
(
RELOID
,
ObjectIdGetDatum
(
indexId
),
0
,
0
,
0
);
if
(
!
HeapTupleIsValid
(
classTuple
))
{
elog
(
ERROR
,
"RelationTruncateIndexes: index access method not found"
);
}
accessMethodId
=
((
Form_pg_class
)
GETSTRUCT
(
classTuple
))
->
relam
;
/*** Open our index relation ***/
currentIndex
=
index_open
(
indexId
);
if
(
currentIndex
==
NULL
)
{
elog
(
ERROR
,
"RelationTruncateIndexes: can't open index relation"
);
}
/*** Truncate the index before building ***/
smgrtruncate
(
DEFAULT_SMGR
,
currentIndex
,
0
);
currentIndex
->
rd_nblocks
=
0
;
/*** Initialize the index and rebuild ***/
InitIndexStrategy
(
numberOfAttributes
,
currentIndex
,
accessMethodId
);
index_build
(
heapRelation
,
currentIndex
,
numberOfAttributes
,
attributeNumberA
,
0
,
NULL
,
funcInfo
,
predInfo
);
/*** Re-open our heap relation and re-lock, since index_build ***/
/*** will close and unlock the relation ***/
heapRelation
=
heap_open
(
heapId
);
LockRelation
(
heapRelation
,
AccessExclusiveLock
);
/*** RelationUnsetLockForWrite(currentIndex); ***/
}
/*** Complete the scan and close the Catalogueindex Relation ***/
heap_endscan
(
scan
);
heap_close
(
indexRelation
);
}
/* ----------------------------
* heap_truncate
*
* This routine is used to truncate the data from the
* storange manager of any data within the relation handed
* to this routine. The routine assumes that the relation
* handed to this routine is an open relation.
*
* ----------------------------
*/
void
heap_truncate
(
char
*
relname
)
{
Relation
rel
;
Oid
rid
;
Portal
portal
;
char
*
pname
;
MemoryContext
old
;
PortalVariableMemory
pmem
;
NameData
truncRel
;
/*
* Create a portal for safe memory across transctions. We need to
* palloc the name space for it because our hash function expects the
* name to be on a longword boundary. CreatePortal copies the name to
* safe storage for us.
*/
pname
=
(
char
*
)
palloc
(
strlen
(
TRUNCPNAME
)
+
1
);
strcpy
(
pname
,
TRUNCPNAME
);
portal
=
CreatePortal
(
pname
);
pfree
(
pname
);
/* relname gets de-allocated on transaction commit */
strcpy
(
truncRel
.
data
,
relname
);
pmem
=
PortalGetVariableMemory
(
portal
);
old
=
MemoryContextSwitchTo
((
MemoryContext
)
pmem
);
MemoryContextSwitchTo
(
old
);
/* Commit the current transaction */
CommitTransactionCommand
();
StartTransactionCommand
();
/* Open relation for processing */
rel
=
heap_openr
(
truncRel
.
data
);
if
(
rel
==
NULL
)
elog
(
ERROR
,
"Relation %s Does Not Exist!"
,
truncRel
.
data
);
rid
=
rel
->
rd_id
;
LockRelation
(
rel
,
AccessExclusiveLock
);
/* Release any buffers associated with this relation */
ReleaseRelationBuffers
(
rel
);
BlowawayRelationBuffers
(
rel
,
0
);
/* Now truncate the actual data and set blocks to zero */
smgrtruncate
(
DEFAULT_SMGR
,
rel
,
0
);
rel
->
rd_nblocks
=
0
;
/* If this relation has indexes, truncate the indexes, which */
/* will unlock the relation as a result. Otherwise, unlock */
/* the relation ourselves. */
if
(
rel
->
rd_rel
->
relhasindex
)
{
RelationTruncateIndexes
(
rel
);
}
else
{
UnlockRelation
(
rel
,
AccessExclusiveLock
);
}
/* Close our relation */
heap_close
(
rel
);
RelationForgetRelation
(
rid
);
/* Destoy cross-transaction memory */
PortalDestroy
(
&
portal
);
/* Start new transaction */
CommitTransactionCommand
();
StartTransactionCommand
();
return
;
}
/* --------------------------------
* DeleteAttributeTuples
*
...
...
src/backend/commands/creatinh.c
View file @
e7cad7b0
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.4
6 1999/09/18 19:06:40 tgl
Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.4
7 1999/09/23 17:02:40 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -157,6 +157,26 @@ RemoveRelation(char *name)
heap_destroy_with_catalog
(
name
);
}
/*
* TruncateRelation --
* Removes all the rows from a relation
*
* Exceptions:
* BadArg if name is invalid
*
*
* Note:
* Rows are removed, indices are truncated and reconstructed.
*/
void
TruncateRelation
(
char
*
name
)
{
AssertArg
(
name
);
heap_truncate
(
name
);
}
/*
* MergeAttributes
...
...
src/backend/parser/gram.y
View file @
e7cad7b0
...
...
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.9
8 1999/09/14 06:06:31 thomas
Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.9
9 1999/09/23 17:02:46 momjian
Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
...
...
@@ -122,6 +122,7 @@ Oid param_type(int t); /* used in parse_expr.c */
%type <node> stmt,
AddAttrStmt, ClosePortalStmt,
CopyStmt, CreateStmt, CreateAsStmt, CreateSeqStmt, DefineStmt, DestroyStmt,
TruncateStmt,
ExtendStmt, FetchStmt, GrantStmt, CreateTrigStmt, DropTrigStmt,
CreatePLangStmt, DropPLangStmt,
IndexStmt, ListenStmt, UnlistenStmt, LockStmt, OptimizableStmt,
...
...
@@ -318,7 +319,7 @@ Oid param_type(int t); /* used in parse_expr.c */
OFFSET, OIDS, OPERATOR, PASSWORD, PROCEDURAL,
RENAME, RESET, RETURNS, ROW, RULE,
SEQUENCE, SERIAL, SETOF, SHARE, SHOW, START, STATEMENT, STDIN, STDOUT,
TRUSTED,
TRU
NCATE, TRU
STED,
UNLISTEN, UNTIL, VACUUM, VALID, VERBOSE, VERSION
/* Special keywords, not in the query language - see the "lex" file */
...
...
@@ -384,6 +385,7 @@ stmt : AddAttrStmt
| ClusterStmt
| DefineStmt
| DestroyStmt
| TruncateStmt
| DropPLangStmt
| DropTrigStmt
| DropUserStmt
...
...
@@ -1607,6 +1609,20 @@ DestroyStmt: DROP TABLE relation_name_list
}
;
/*****************************************************************************
*
* QUERY:
* truncate table relname
*
*****************************************************************************/
TruncateStmt: TRUNCATE TABLE relation_name
{
TruncateStmt *n = makeNode(TruncateStmt);
n->relName = $3;
$$ = (Node *)n;
}
;
/*****************************************************************************
*
...
...
@@ -2371,7 +2387,6 @@ ClusterStmt: CLUSTER index_name ON relation_name
}
;
/*****************************************************************************
*
* QUERY:
...
...
src/backend/parser/keywords.c
View file @
e7cad7b0
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.6
0 1999/07/17 20:17:22
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.6
1 1999/09/23 17:02:46
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -225,6 +225,7 @@ static ScanKeyword ScanKeywords[] = {
{
"trigger"
,
TRIGGER
},
{
"trim"
,
TRIM
},
{
"true"
,
TRUE_P
},
{
"truncate"
,
TRUNCATE
},
{
"trusted"
,
TRUSTED
},
{
"type"
,
TYPE_P
},
{
"union"
,
UNION
},
...
...
src/backend/tcop/utility.c
View file @
e7cad7b0
...
...
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.6
5 1999/09/18 19:07:44 tgl
Exp $
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.6
6 1999/09/23 17:02:52 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -206,6 +206,38 @@ ProcessUtility(Node *parsetree,
}
break
;
case
T_TruncateStmt
:
{
Relation
rel
;
PS_SET_STATUS
(
commandTag
=
"TRUNCATE"
);
CHECK_IF_ABORTED
();
relname
=
((
TruncateStmt
*
)
parsetree
)
->
relName
;
if
(
!
allowSystemTableMods
&&
IsSystemRelationName
(
relname
))
{
elog
(
ERROR
,
"TRUNCATE cannot be used on system tables. '%s' is a system table"
,
relname
);
}
rel
=
heap_openr
(
relname
);
if
(
RelationIsValid
(
rel
))
{
if
(
rel
->
rd_rel
->
relkind
==
RELKIND_SEQUENCE
)
{
elog
(
ERROR
,
"TRUNCATE cannot be used on sequences. '%s' is a sequence"
,
relname
);
}
heap_close
(
rel
);
}
#ifndef NO_SECURITY
if
(
!
pg_ownercheck
(
userName
,
relname
,
RELNAME
))
{
elog
(
ERROR
,
"you do not own class
\"
%s
\"
"
,
relname
);
}
#endif
TruncateRelation
(((
TruncateStmt
*
)
parsetree
)
->
relName
);
}
break
;
case
T_CopyStmt
:
{
CopyStmt
*
stmt
=
(
CopyStmt
*
)
parsetree
;
...
...
src/backend/utils/mmgr/portalmem.c
View file @
e7cad7b0
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v 1.
29 1999/09/09 16:25:29 tgl
Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v 1.
30 1999/09/23 17:02:58 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -410,6 +410,8 @@ PortalNameIsSpecial(char *pname)
{
if
(
strcmp
(
pname
,
VACPNAME
)
==
0
)
return
true
;
if
(
strcmp
(
pname
,
TRUNCPNAME
)
==
0
)
return
true
;
return
false
;
}
...
...
src/bin/psql/psqlHelp.h
View file @
e7cad7b0
...
...
@@ -5,7 +5,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: psqlHelp.h,v 1.7
2 1999/07/11 22:47:21 ishii
Exp $
* $Id: psqlHelp.h,v 1.7
3 1999/09/23 17:03:04 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -23,11 +23,11 @@ static struct _helpStruct QL_HELP[] = {
"\
\t
abort [transaction|work];"
},
{
"alter table"
,
"add/rename
attribute
s, rename tables"
,
"add/rename
column
s, rename tables"
,
"\
\t
ALTER TABLE
class_name [*] ADD COLUMN attr
type
\n
\
\t
ALTER TABLE
class_name [*] RENAME [COLUMN] attr1 TO attr
2
\n
\
\t
ALTER TABLE
class_name1 RENAME TO class_
name2"
},
\t
ALTER TABLE
tablename [*] ADD COLUMN colname
type
\n
\
\t
ALTER TABLE
tablename [*] RENAME [COLUMN] colname1 TO colname
2
\n
\
\t
ALTER TABLE
tablename1 RENAME TO table
name2"
},
{
"alter user"
,
"alter system information for a user"
,
"\
...
...
@@ -56,7 +56,7 @@ static struct _helpStruct QL_HELP[] = {
{
"copy"
,
"copy data to and from a table"
,
"\
\t
COPY [BINARY]
class_
name [WITH OIDS]
\n
\
\t
COPY [BINARY]
table
name [WITH OIDS]
\n
\
\t
TO|FROM filename|STDIN|STDOUT [USING DELIMITERS 'delim'];"
},
{
"create"
,
"Please be more specific:"
,
...
...
@@ -93,8 +93,8 @@ static struct _helpStruct QL_HELP[] = {
{
"create index"
,
"construct an index"
,
"\
\t
CREATE [UNIQUE] INDEX indexname ON
class_
name [USING access_method]
\n
\
(
attr1 [type_class1], ...attrN | funcname(attr
1, ...) [type_class] );"
},
\t
CREATE [UNIQUE] INDEX indexname ON
table
name [USING access_method]
\n
\
(
colname1 [type_class1], ...colnameN | funcname(colname
1, ...) [type_class] );"
},
{
"create operator"
,
"create a user-defined operator"
,
"\
...
...
@@ -124,16 +124,16 @@ static struct _helpStruct QL_HELP[] = {
{
"create table"
,
"create a new table"
,
"\
\t
CREATE [TEMP] TABLE
class_
name
\n
\
\t
(
attr1 type1 [DEFAULT expression] [NOT NULL], ...attr
N
\n
\
\t
CREATE [TEMP] TABLE
table
name
\n
\
\t
(
colname1 type1 [DEFAULT expression] [NOT NULL], ...colname
N
\n
\
\t
[[CONSTRAINT name] CHECK condition1, ...conditionN] )
\n
\
\t
[INHERITS (
class_name1, ...class_
nameN)
\n
\
\t
[INHERITS (
tablename1, ...table
nameN)
\n
\
;"
},
{
"create trigger"
,
"create a new trigger"
,
"\
\t
CREATE TRIGGER trigger_name AFTER|BEFORE event1 [OR event2 [OR event3] ]
\n
\
\t
ON
class_
name FOR EACH ROW|STATEMENT
\n
\
\t
ON
table
name FOR EACH ROW|STATEMENT
\n
\
\t
EXECUTE PROCEDURE func_name ([arguments])
\n
\
\n
\
\t
eventX is one of INSERT, DELETE, UPDATE"
},
...
...
@@ -159,8 +159,8 @@ static struct _helpStruct QL_HELP[] = {
"create a view"
,
"\
\t
CREATE VIEW view_name AS
\n
\
\t
SELECT [DISTINCT [ON
attr
N]]
\n
\
\t
expr1 [AS
attr
1], ...exprN
\n
\
\t
SELECT [DISTINCT [ON
colname
N]]
\n
\
\t
expr1 [AS
colname
1], ...exprN
\n
\
\t
[FROM from_list]
\n
\
\t
[WHERE qual]
\n
\
\t
[GROUP BY group_list];"
},
...
...
@@ -168,18 +168,18 @@ static struct _helpStruct QL_HELP[] = {
"set up a cursor"
,
"\
\t
DECLARE cursorname [BINARY] CURSOR FOR
\n
\
\t
SELECT [DISTINCT [ON
attr
N]]
\n
\
\t
expr1 [AS
attr
1], ...exprN
\n
\
\t
SELECT [DISTINCT [ON
colname
N]]
\n
\
\t
expr1 [AS
colname
1], ...exprN
\n
\
\t
[FROM from_list]
\n
\
\t
[WHERE qual]
\n
\
\t
[GROUP BY group_list]
\n
\
\t
[HAVING having_clause]
\n
\
\t
[ORDER BY
attr1 [USING op1], ...attr
N]
\n
\
\t
[ORDER BY
colname1 [USING op1], ...colname
N]
\n
\
\t
[ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...];"
},
{
"delete"
,
"delete tuples"
,
"\
\t
DELETE FROM
class_
name [WHERE qual];"
},
\t
DELETE FROM
table
name [WHERE qual];"
},
{
"drop"
,
"Please be more specific:"
,
"\
...
...
@@ -225,11 +225,11 @@ static struct _helpStruct QL_HELP[] = {
{
"drop table"
,
"remove a table"
,
"\
\t
DROP TABLE
class_name1, ...class_
nameN;"
},
\t
DROP TABLE
tablename1, ...table
nameN;"
},
{
"drop trigger"
,
"remove a trigger"
,
"\
\t
DROP TRIGGER trigger_name ON
class_
name;"
},
\t
DROP TRIGGER trigger_name ON
table
name;"
},
{
"drop type"
,
"remove a user-defined base type"
,
"\
...
...
@@ -263,9 +263,9 @@ static struct _helpStruct QL_HELP[] = {
{
"insert"
,
"insert tuples"
,
"\
\t
INSERT INTO
class_name [(attr1, ...attr
N)]
\n
\
\t
INSERT INTO
tablename [(colname1, ...colname
N)]
\n
\
\t
VALUES (expr1,..exprN) |
\n
\
\t
SELECT [DISTINCT [ON
attr
N]]
\n
\
\t
SELECT [DISTINCT [ON
colname
N]]
\n
\
\t
expr1, ...exprN
\n
\
\t
[FROM from_clause]
\n
\
\t
[WHERE qual]
\n
\
...
...
@@ -283,7 +283,7 @@ static struct _helpStruct QL_HELP[] = {
{
"lock"
,
"exclusive lock a table inside a transaction"
,
"\
\t
LOCK [TABLE]
class_
name
\n
\
\t
LOCK [TABLE]
table
name
\n
\
\t
[IN [ROW|ACCESS] [SHARE|EXCLUSIVE] | [SHARE ROW EXCLUSIVE] MODE];"
},
{
"move"
,
"move an cursor position"
,
...
...
@@ -311,15 +311,15 @@ TIMEZONE|XACTISOLEVEL|CLIENT_ENCODING|SERVER_ENCODING"},
{
"select"
,
"retrieve tuples"
,
"\
\t
SELECT [DISTINCT [ON
attrN]] expr1 [AS attr
1], ...exprN
\n
\
\t
[INTO [TEMP] [TABLE]
class_
name]
\n
\
\t
SELECT [DISTINCT [ON
colnameN]] expr1 [AS colname
1], ...exprN
\n
\
\t
[INTO [TEMP] [TABLE]
table
name]
\n
\
\t
[FROM from_list]
\n
\
\t
[WHERE qual]
\n
\
\t
[GROUP BY group_list]
\n
\
\t
[HAVING having_clause]
\n
\
\t
[ { UNION [ALL] | INTERSECT | EXCEPT } SELECT ...]
\n
\
\t
[ORDER BY
attr1 [ASC|DESC] [USING op1], ...attr
N ]
\n
\
\t
[FOR UPDATE [OF
class_
name...]]
\n
\
\t
[ORDER BY
colname1 [ASC|DESC] [USING op1], ...colname
N ]
\n
\
\t
[FOR UPDATE [OF
table
name...]]
\n
\
\t
[LIMIT count [OFFSET|, count]];"
},
{
"set"
,
"set run-time environment"
,
...
...
@@ -346,10 +346,14 @@ TIMEZONE|XACTISOLEVEL|CLIENT_ENCODING|SERVER_ENCODING"},
"stop listening for notification on a condition name"
,
"\
\t
UNLISTEN name|
\"
non-name string
\"
|
\"
*
\"
"
},
{
"truncate"
,
"quickly removes all rows from a table"
,
"\
\t
TRUNCATE TABLE tablename"
},
{
"update"
,
"update tuples"
,
"\
\t
UPDATE
class_name SET attr1 = expr1, ...attr
N = exprN
\n
\
\t
UPDATE
tablename SET colname1 = expr1, ...colname
N = exprN
\n
\
\t
[FROM from_clause]
\n
\
\t
[WHERE qual];"
},
{
"vacuum"
,
...
...
@@ -357,7 +361,7 @@ TIMEZONE|XACTISOLEVEL|CLIENT_ENCODING|SERVER_ENCODING"},
"\
\t
VACUUM [VERBOSE] [ANALYZE] [table]
\n
\
\t
or
\n
\
\t
VACUUM [VERBOSE] ANALYZE [table [(
attr1, ...attr
N)]];"
},
\t
VACUUM [VERBOSE] ANALYZE [table [(
colname1, ...colname
N)]];"
},
{
NULL
,
NULL
,
NULL
}
/* important to keep a NULL terminator
* here! */
};
src/include/catalog/heap.h
View file @
e7cad7b0
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: heap.h,v 1.2
0 1999/07/15 23:03:41
momjian Exp $
* $Id: heap.h,v 1.2
1 1999/09/23 17:03:10
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -23,6 +23,7 @@ extern Oid heap_create_with_catalog(char *relname,
TupleDesc
tupdesc
,
char
relkind
,
bool
istemp
);
extern
void
heap_destroy_with_catalog
(
char
*
relname
);
extern
void
heap_truncate
(
char
*
relname
);
extern
void
heap_destroy
(
Relation
rel
);
extern
void
InitNoNameRelList
(
void
);
...
...
src/include/commands/creatinh.h
View file @
e7cad7b0
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: creatinh.h,v 1.
9 1999/02/13 23:21:18
momjian Exp $
* $Id: creatinh.h,v 1.
10 1999/09/23 17:03:16
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -17,5 +17,6 @@
extern
void
DefineRelation
(
CreateStmt
*
stmt
,
char
relkind
);
extern
void
RemoveRelation
(
char
*
name
);
extern
void
TruncateRelation
(
char
*
name
);
#endif
/* CREATINH_H */
src/include/nodes/nodes.h
View file @
e7cad7b0
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: nodes.h,v 1.5
1 1999/08/16 02:17:39 tgl
Exp $
* $Id: nodes.h,v 1.5
2 1999/09/23 17:03:21 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -151,6 +151,7 @@ typedef enum NodeTag
T_VersionStmt
,
T_DefineStmt
,
T_DestroyStmt
,
T_TruncateStmt
,
T_ExtendStmt
,
T_FetchStmt
,
T_IndexStmt
,
...
...
src/include/nodes/parsenodes.h
View file @
e7cad7b0
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: parsenodes.h,v 1.7
8 1999/08/21 03:49:09 tgl
Exp $
* $Id: parsenodes.h,v 1.7
9 1999/09/23 17:03:22 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -282,6 +282,16 @@ typedef struct DestroyStmt
bool
sequence
;
}
DestroyStmt
;
/* ----------------------
* Truncate Table Statement
* ----------------------
*/
typedef
struct
TruncateStmt
{
NodeTag
type
;
char
*
relName
;
/* relation to be truncated */
}
TruncateStmt
;
/* ----------------------
* Extend Index Statement
* ----------------------
...
...
src/include/storage/bufmgr.h
View file @
e7cad7b0
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: bufmgr.h,v 1.
29 1999/07/17 20:18:33
momjian Exp $
* $Id: bufmgr.h,v 1.
30 1999/09/23 17:03:27
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -161,6 +161,7 @@ extern void BufferRefCountReset(int *refcountsave);
extern
void
BufferRefCountRestore
(
int
*
refcountsave
);
extern
int
SetBufferWriteMode
(
int
mode
);
extern
void
SetBufferCommitInfoNeedsSave
(
Buffer
buffer
);
extern
int
BlowawayRelationBuffers
(
Relation
rel
,
BlockNumber
block
);
extern
void
UnlockBuffers
(
void
);
extern
void
LockBuffer
(
Buffer
buffer
,
int
mode
);
...
...
src/include/utils/portal.h
View file @
e7cad7b0
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: portal.h,v 1.1
8 1999/09/09 16:25:23 tgl
Exp $
* $Id: portal.h,v 1.1
9 1999/09/23 17:03:33 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -60,6 +60,7 @@ struct PortalD
* Special portals (well, their names anyway)
*/
#define VACPNAME "<vacuum>"
#define TRUNCPNAME "<truncate>"
extern
bool
PortalNameIsSpecial
(
char
*
pname
);
extern
void
AtEOXact_portals
(
void
);
...
...
src/tools/pgindent/pgindent
View file @
e7cad7b0
...
...
@@ -163,6 +163,7 @@ do
-TDepth
\
-TDestReceiver
\
-TDestroyStmt
\
-TTruncateStmt
\
-TDestroydbStmt
\
-TDisplay
\
-TDl_info
\
...
...
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