pdf viewer for asp.net web application : Add image to pdf reader software Library cloud windows asp.net wpf class postgresql-9.4-A423-part2868

Chapter 8. Data Types
supplier_id
integer,
price
numeric
);
The syntax is comparable to
CREATE TABLE
,except that onlyfield names and types can be specified;
no constraints (such as
NOT NULL
)can presently be included. Note that the
AS
keyword is essential;
without it, the system will think a different kind of
CREATE TYPE
command is meant, and you will
get odd syntax errors.
Having defined the types, we can use them to create tables:
CREATE TABLE on_hand (
item
inventory_item,
count
integer
);
INSERT INTO on_hand VALUES (ROW(’fuzzy dice’, 42, 1.99), 1000);
or functions:
CREATE FUNCTION price_extension(inventory_item, integer) RETURNS numeric
AS ’SELECT $1.price
*
$2’ LANGUAGE SQL;
SELECT price_extension(item, 10) FROM on_hand;
Whenever you create a table, a composite type is also automatically created, with the same name as
the table, to represent the table’s row type. For example, had we said:
CREATE TABLE inventory_item (
name
text,
supplier_id
integer REFERENCES suppliers,
price
numeric CHECK (price > 0)
);
thenthe same
inventory_item
composite type shown above would comeinto beingas a byproduct,
and could be used just as above. Notehowever an importantrestrictionof thecurrent implementation:
since no constraints are associatedwith a compositetype, the constraints shown in the table definition
do not apply to values of the composite type outside the table. (Apartial workaroundis to use domain
types as members of composite types.)
8.16.2. Composite Value Input
To write a composite value as a literal constant, enclose the field values within parentheses and sepa-
rate them by commas. You canput double quotes around any field value, and must do so if it contains
commasor parentheses. (More details appear below.) Thus, the generalformatof a composite constant
is the following:
’(
val1
,
val2
, ... )’
An example is:
’("fuzzy dice",42,1.99)’
158
Add image to pdf reader - insert images into PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sample C# code to add image, picture, logo or digital photo into PDF document page using PDF page editor control
how to add photo to pdf in preview; how to add an image to a pdf in acrobat
Add image to pdf reader - VB.NET PDF insert image library: insert images into PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide VB.NET Programmers How to Add Images in PDF Document
how to add image to pdf in acrobat; add picture pdf
Chapter 8. Data Types
which would be a validvalue of the
inventory_item
type defined above. To make afield beNULL,
write no characters at all in its position in the list. For example, this constant specifies a NULL third
field:
’("fuzzy dice",42,)’
If you want an empty string rather than NULL, write double quotes:
’("",42,)’
Here the first field is a non-NULL empty string, the third is NULL.
(These constants are actually only a special case of the generic type constants discussed in Section
4.1.2.7. The constant is initially treated as a string and passed to the composite-type input conversion
routine. An explicit type specification might be necessary.)
The
ROW
expression syntax can also be used to construct composite values. In most cases this is
considerablysimpler touse than the string-literal syntax since you don’t have to worryabout multiple
layers of quoting. We already used this method above:
ROW(’fuzzy dice’, 42, 1.99)
ROW(”, 42, NULL)
The ROW keyword is actually optional as long as you have more than one field in the expression, so
these can simplify to:
(’fuzzy dice’, 42, 1.99)
(”, 42, NULL)
The
ROW
expression syntax is discussed in more detail in Section 4.2.13.
8.16.3. Accessing Composite Types
To access a field of a composite column, one writes a dot and the field name, much like selecting a
field from a table name. Infact, it’s so much likeselectingfrom a table name thatyouoftenhavetouse
parentheses to keep from confusing the parser. For example, you might try to select some subfields
from our
on_hand
example table with something like:
SELECT item.name FROM on_hand WHERE item.price > 9.99;
This will not work since the name
item
is taken to be a table name, not a column name of
on_hand
,
per SQL syntax rules. You must write it like this:
SELECT (item).name FROM on_hand WHERE (item).price > 9.99;
or if youneed to use the table name as well (for instance in a multitable query), like this:
SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;
Now the parenthesized object is correctly interpreted as a reference to the
item
column, and then the
subfield can be selected from it.
Similar syntactic issues apply whenever you select a field from a composite value. For instance, to
select just one field from the result of a function that returns a composite value, you’d need to write
something like:
SELECT (my_func(...)).field FROM ...
159
C# Imaging - Scan Barcode Image in C#.NET
RasterEdge Barcode Reader DLL add-in enables developers to add barcode image recognition & types, such as Code 128, EAN-13, QR Code, PDF-417, etc.
how to add image to pdf acrobat; adding a png to a pdf
XImage.Barcode Scanner for .NET, Read, Scan and Recognize barcode
VB.NET Write: Add Image to PDF; VB.NET Protect: Add Password to VB.NET Annotate: PDF Markup & Drawing. XDoc.Word for C#; XDoc.Excel for C#; XDoc.PowerPoint for
adding a jpeg to a pdf; how to add image to pdf file
Chapter 8. Data Types
Without the extra parentheses, this will generate a syntax error.
8.16.4. Modifying Composite Types
Here are some examples of the proper syntax for inserting and updating composite columns. First,
inserting or updating a whole column:
INSERT INTO mytab (complex_col) VALUES((1.1,2.2));
UPDATE mytab SET complex_col = ROW(1.1,2.2) WHERE ...;
The first example omits
ROW
,the second uses it; we could have done it either way.
We can update an individual subfield of a composite column:
UPDATE mytab SET complex_col.r = (complex_col).r + 1 WHERE ...;
Notice here that we don’t need to (and indeed cannot) put parentheses around the column name
appearing just after
SET
,but we do need parentheses when referencing the same column in the ex-
pression to the right of the equal sign.
And we can specify subfields as targets for
INSERT
,too:
INSERT INTO mytab (complex_col.r, complex_col.i) VALUES(1.1, 2.2);
Had we not supplied values for all the subfields of the column, the remaining subfields would have
been filled with null values.
8.16.5. Composite Type Input and Output Syntax
The external text representation of a composite value consists of items that are interpreted according
to the I/O conversion rules for the individual field types, plus decoration that indicates the composite
structure. The decoration consists of parentheses (
(
and
)
)around the whole value, plus commas (
,
)
between adjacent items. Whitespace outside the parentheses is ignored, but within the parentheses it
is considered part of the field value, and might or might not be significant depending on the input
conversion rules for the field data type. For example, in:
’(
42)’
the whitespace will be ignored if the field type is integer, but not if it is text.
As shown previously, when writing a composite value you can write double quotes around any in-
dividual field value. You must do so if the field value would otherwise confuse the composite-value
parser. In particular, fields containing parentheses, commas, double quotes, or backslashes must be
double-quoted. To put a double quote or backslash in a quoted composite field value, precede it with
abackslash. (Also, a pair of double quotes within a double-quoted field value is taken to represent a
doublequote character, analogously to the rules for single quotes in SQLliteralstrings.) Alternatively,
you can avoid quoting and use backslash-escaping to protect all data characters that would otherwise
be taken as composite syntax.
Acompletely empty field value (no characters at all between the commas or parentheses) represents
aNULL. To write a value that is an empty string rather than NULL, write
""
.
The composite output routine will put double quotes around field values if they are empty strings or
contain parentheses, commas, double quotes, backslashes, or white space. (Doing so for white space
160
C# PDF Image Extract Library: Select, copy, paste PDF images in C#
Get image information, such as its location, zonal information, metadata, and so on. Able to edit, add, delete, move, and output PDF document image.
attach image to pdf form; add image to pdf acrobat
VB.NET PDF Password Library: add, remove, edit PDF file password
VB: Add Password to PDF with Permission Settings Applied. This VB.NET example shows how to add PDF file password with access permission setting.
adding an image to a pdf form; add picture to pdf in preview
Chapter 8. Data Types
is not essential, but aids legibility.) Double quotes and backslashes embedded in field values will be
doubled.
Note: Remember that what you write in an SQL command will first be interpreted as a string
literal, and then as a composite. This doubles the number of backslashes you need (assuming
escape string syntax is used). For example, to insert a
text
field containing a double quote and
abackslash in a composite value, you’d need to write:
INSERT ... VALUES (E’("\\"\\\\")’);
The string-literal processor removes one level of backslashes, so that what arrives at the
composite-value parser looks like
("\"\\")
.In turn, the string fed to the
text
data type’s input
routine becomes
"\
. (If we were working with a data type whose input routine also treated
backslashes specially,
bytea
for example, we might need as many as eight backslashes in the
command to get one backslash into the stored composite field.) Dollar quoting (see Section
4.1.2.4) can be used to avoid the need to double backslashes.
Tip: The
ROW
constructor syntax is usually easier to work with than the composite-literal syntax
when writing composite values in SQL commands. In
ROW
,individual field values are written the
same way they would be written when not members of a composite.
8.17. Range Types
Range types are data types representing a range of values of some element type (called the range’s
subtype). For instance, ranges of
timestamp
might be used to represent the ranges of time that a
meeting room is reserved. In this case the data type is
tsrange
(short for “timestamp range”), and
timestamp
is the subtype. The subtype must have a total order so that it is well-defined whether
element values are within, before, or after a range of values.
Range types are useful because they represent many element values in a single range value, and
because concepts such as overlapping ranges can be expressed clearly. The use of time and date
ranges for scheduling purposes is the clearest example; but price ranges, measurement ranges from
an instrument, and so forth can also be useful.
8.17.1. Built-in Range Types
PostgreSQL comes with the following built-in range types:
int4range
—Range of
integer
int8range
—Range of
bigint
numrange
—Range of
numeric
tsrange
—Range of
timestamp without time zone
tstzrange
—Range of
timestamp with time zone
daterange
—Range of
date
In addition, you can define your own range types; see CREATE TYPE for more information.
161
VB.NET PDF Image Extract Library: Select, copy, paste PDF images
DLLs for PDF Image Extraction in VB.NET. In order to run the sample code, the following steps would be necessary. Add necessary references:
add jpg to pdf document; how to add a jpg to a pdf
C# PDF Password Library: add, remove, edit PDF file password in C#
C# Sample Code: Add Password to PDF with Permission Settings Applied in C#.NET. This example shows how to add PDF file password with access permission setting.
add image field to pdf form; how to add an image to a pdf in reader
Chapter 8. Data Types
8.17.2. Examples
CREATE TABLE reservation (room int, during tsrange);
INSERT INTO reservation VALUES
(1108, ’[2010-01-01 14:30, 2010-01-01 15:30)’);
-- Containment
SELECT int4range(10, 20) @> 3;
-- Overlaps
SELECT numrange(11.1, 22.2) && numrange(20.0, 30.0);
-- Extract the upper bound
SELECT upper(int8range(15, 25));
-- Compute the intersection
SELECT int4range(10, 20)
*
int4range(15, 25);
-- Is the range empty?
SELECT isempty(numrange(1, 5));
See Table 9-47 and Table 9-48 for complete lists of operators and functions on range types.
8.17.3. Inclusive and Exclusive Bounds
Every non-empty range has two bounds, the lower bound and the upper bound. All points between
these values are included in the range. An inclusive bound means that the boundary point itself is
includedin the range as well, while anexclusive bound means that the boundary pointis notincluded
in the range.
In the text form of a range, an inclusive lower bound is represented by “
[
”while an exclusive lower
bound is represented by “
(
”. Likewise, an inclusive upper bound is represented by “
]
”, while an
exclusive upper bound is represented by “
)
”. (See Section 8.17.5 for more details.)
The functions
lower_inc
and
upper_inc
test the inclusivity of the lower and upper bounds of a
range value, respectively.
8.17.4. Infinite (Unbounded) Ranges
The lower bound of a range can be omitted, meaning that all points less than the upper bound are
includedinthe range. Likewise, if the upper bound of the range is omitted, then all points greater than
the lower bound are included in the range. If both lower and upper bounds are omitted, all values of
the element type are considered to be in the range.
This is equivalent to considering that the lower bound is “minus infinity”, or the upper bound is “plus
infinity”, respectively. But note that these infinite values are never values of the range’s element type,
and can never be part of the range. (So there is no such thing as an inclusive infinite bound — if you
tryto write one, it will automatically be converted to an exclusive bound.)
Also, some element types have a notion of “infinity”, but that is just another value so far as the range
type mechanisms are concerned. For example, in timestamp ranges,
[today,]
means the same thing
as
[today,)
.But
[today,infinity]
means something different from
[today,infinity)
the latter excludes the special
timestamp
value
infinity
.
162
C# PDF Sticky Note Library: add, delete, update PDF note in C#.net
Evaluation library and components enable users to annotate PDF without adobe PDF reader control installed. Able to add notes to PDF using C# source code in
add image pdf acrobat; add an image to a pdf
C# Create PDF from images Library to convert Jpeg, png images to
List<Bitmap> images = new List<Bitmap>(); images.Add(new Bitmap(Program.RootPath + "\\" 1.gif")); / Build a PDF document with GIF image.
add jpg to pdf online; add picture to pdf preview
Chapter 8. Data Types
The functions
lower_inf
and
upper_inf
test for infinite lower and upper bounds of a range, re-
spectively.
8.17.5. Range Input/Output
The input for a range value must followone of the following patterns:
(
lower-bound
,
upper-bound
)
(
lower-bound
,
upper-bound
]
[
lower-bound
,
upper-bound
)
[
lower-bound
,
upper-bound
]
empty
The parentheses or brackets indicate whether the lower and upper bounds are exclusive or inclusive,
as described previously. Notice that the final pattern is
empty
,which represents an empty range (a
range that contains no points).
The
lower-bound
may be either a string that is valid input for the subtype, or empty to indicate no
lower bound. Likewise,
upper-bound
may be either a string that is valid input for the subtype, or
empty to indicate no upper bound.
Each bound value can be quoted using
"
(double quote) characters. This is necessary if the bound
value contains parentheses, brackets, commas, double quotes, or backslashes, since these characters
would otherwise be taken as part of the range syntax. To put a double quote or backslash in a quoted
bound value, precedeit witha backslash. (Also, apair of double quotes withina double-quoted bound
value is taken torepresent a double quote character, analogously to the rules for single quotes in SQL
literal strings.) Alternatively, you can avoid quoting and use backslash-escaping to protect all data
characters that would otherwise be taken as range syntax. Also, to write a bound value that is an
empty string, write
""
,since writing nothing means an infinite bound.
Whitespace is allowed before and after the range value, but any whitespace between the parentheses
or brackets is taken as part of the lower or upper bound value. (Depending on the element type, it
might or might not be significant.)
Note: These rules are very similar to those for writing field values in composite-type literals. See
Section 8.16.5 for additional commentary.
Examples:
-- includes 3, does not include 7, and does include all points in between
SELECT ’[3,7)’::int4range;
-- does not include either 3 or 7, but includes all points in between
SELECT ’(3,7)’::int4range;
-- includes only the single point 4
SELECT ’[4,4]’::int4range;
-- includes no points (and will be normalized to ’empty’)
SELECT ’[4,4)’::int4range;
163
Chapter 8. Data Types
8.17.6. Constructing Ranges
Each range type has a constructor function withthe same name as the range type. Usingthe construc-
tor function is frequently more convenient than writing a range literal constant, since it avoids the
need for extra quoting of the bound values. The constructor function accepts two or three arguments.
The two-argument form constructs a range in standard form (lower bound inclusive, upper bound
exclusive), while the three-argument form constructs a range with bounds of the form specified by
the third argument. The third argument must be one of the strings “
()
”, “
(]
”, “
[)
”, or “
[]
”. For
example:
-- The full form is: lower bound, upper bound, and text argument indicating
-- inclusivity/exclusivity of bounds.
SELECT numrange(1.0, 14.0, ’(]’);
-- If the third argument is omitted, ’[)’ is assumed.
SELECT numrange(1.0, 14.0);
-- Although ’(]’ is specified here, on display the value will be converted to
-- canonical form, since int8range is a discrete range type (see below).
SELECT int8range(1, 14, ’(]’);
-- Using NULL for either bound causes the range to be unbounded on that side.
SELECT numrange(NULL, 2.2);
8.17.7. Discrete Range Types
Adiscrete range is one whose element type has a well-defined “step”, such as
integer
or
date
.In
these types two elements can be said to be adjacent, when there are no valid values between them.
This contrasts with continuous ranges, where it’s always (or almost always) possible to identify other
elementvalues betweentwogivenvalues. For example, arange over the
numeric
type is continuous,
as is a range over
timestamp
.(Eventhough
timestamp
has limited precision, and so could theoret-
ically be treated as discrete, it’s better to consider it continuous since the step size is normally not of
interest.)
Another wayto think about a discrete range type is that there is a clear idea of a “next” or “previous”
value for each element value. Knowing that, it is possible to convert between inclusive and exclusive
representations of a range’s bounds, by choosing the next or previous element value instead of the
one originally given. For example, in an integer range type
[4,8]
and
(3,9)
denote the same set of
values; but this would not be so for a range over numeric.
Adiscrete range type should havea canonicalization function that is aware of the desired step size for
the element type. The canonicalization function is charged with converting equivalent values of the
range type to have identical representations, in particular consistently inclusive or exclusive bounds.
If a canonicalization function is not specified, then ranges with different formatting will always be
treated as unequal, even though they might represent the same set of values in reality.
The built-in range types
int4range
,
int8range
,and
daterange
all use a canonical form that
includes the lower bound and excludes the upper bound; that is,
[)
.User-defined range types canuse
other conventions, however.
164
Chapter 8. Data Types
8.17.8. Defining New Range Types
Users can define their own range types. The most common reason to do this is to use ranges over
subtypes not provided among the built-in range types. For example, to define a new range type of
subtype
float8
:
CREATE TYPE floatrange AS RANGE (
subtype = float8,
subtype_diff = float8mi
);
SELECT ’[1.234, 5.678]’::floatrange;
Because
float8
has no meaningful “step”, we do not define a canonicalization function in this ex-
ample.
If the subtype is considered to have discrete rather than continuous values, the
CREATE TYPE
com-
mand should specify a
canonical
function.The canonicalizationfunctiontakes aninputrangevalue,
andmustreturn anequivalent range value thatmayhave different bounds andformatting. The canoni-
cal output for two ranges that representthesame setof values, for example the integer ranges
[1, 7]
and
[1, 8)
,must be identical. Itdoesn’tmatter which representation you choose to be the canonical
one, so long as two equivalent values with different formattings are always mapped to the same value
with the same formatting. In addition to adjustingthe inclusive/exclusive bounds format, a canonical-
ization function might round off boundary values, in case the desired step size is larger than what the
subtype is capable of storing. For instance, a range type over
timestamp
could be defined to have a
step size of an hour, in which case the canonicalization function would need to round off bounds that
weren’t a multiple of an hour, or perhaps throw an error instead.
Defining your own range type also allows you to specify a different subtype B-tree operator class or
collation touse, soas to change the sort ordering that determines which values fallinto a givenrange.
In addition, any range type that is meant to be used with GiST or SP-GiST indexes should define a
subtype difference, or
subtype_diff
,function. (the index will still work without
subtype_diff
,
but it is likely to be considerably less efficient than if a difference function is provided.) The subtype
difference function takes two input values of the subtype, andreturns their difference (i.e.,
X
minus
Y
)
represented as a
float8
value. In our example above, the function that underlies the regular
float8
minus operator can be used; but for any other subtype, some type conversion would be necessary.
Some creative thought about how to represent differences as numbers might be needed, too. To the
greatest extent possible, the
subtype_diff
function should agree with the sort ordering implied
by the selected operator class and collation; that is, its result should be positive whenever its first
argument is greater than its second according to the sort ordering.
See CREATE TYPE for more information about creating range types.
8.17.9. Indexing
GiST and SP-GiST indexes can be created for table columns of range types. For instance, to create a
GiST index:
CREATE INDEX reservation_idx ON reservation USING gist (during);
AGiST or SP-GiST indexcan accelerate queries involvingthese range operators:
=
,
&&
,
<@
,
@>
,
<<
,
>>
,
-|-
,
&<
,and
&>
(see Table 9-47 for more information).
In addition, B-tree and hash indexes can be created for table columns of range types. For these index
types, basically the only useful range operation is equality. There is a B-tree sort ordering defined
165
Chapter 8. Data Types
for range values, with corresponding
<
and
>
operators, but the ordering is rather arbitrary and not
usually useful in the real world. Range types’ B-tree and hash support is primarily meant to allow
sorting and hashing internally in queries, rather than creation of actual indexes.
8.17.10. Constraints on Ranges
While
UNIQUE
is a natural constraint for scalar values, it is usually unsuitable for range types. In-
stead, an exclusion constraint is often more appropriate (see CREATE TABLE ... CONSTRAINT ...
EXCLUDE). Exclusion constraints allow the specification of constraints such as “non-overlapping”
on a range type. For example:
CREATE TABLE reservation (
during tsrange,
EXCLUDE USING gist (during WITH &&)
);
That constraint will prevent any overlapping values from existing in the table at the same time:
INSERT INTO reservation VALUES
(’[2010-01-01 11:30, 2010-01-01 15:00)’);
INSERT 0 1
INSERT INTO reservation VALUES
(’[2010-01-01 14:45, 2010-01-01 15:45)’);
ERROR:
conflicting key value violates exclusion constraint "reservation_during_excl"
DETAIL:
Key (during)=(["2010-01-01 14:45:00","2010-01-01 15:45:00")) conflicts
with existing key (during)=(["2010-01-01 11:30:00","2010-01-01 15:00:00")).
You can use the
btree_gist
extension to define exclusion constraints on plain scalar data types,
which can then be combined with range exclusions for maximum flexibility. For example, after
btree_gist
is installed, the following constraint will reject overlapping ranges only if the meet-
ing room numbers are equal:
CREATE EXTENSION btree_gist;
CREATE TABLE room_reservation (
room text,
during tsrange,
EXCLUDE USING gist (room WITH =, during WITH &&)
);
INSERT INTO room_reservation VALUES
(’123A’, ’[2010-01-01 14:00, 2010-01-01 15:00)’);
INSERT 0 1
INSERT INTO room_reservation VALUES
(’123A’, ’[2010-01-01 14:30, 2010-01-01 15:30)’);
ERROR:
conflicting key value violates exclusion constraint "room_reservation_room_during_excl"
DETAIL:
Key (room, during)=(123A, ["2010-01-01 14:30:00","2010-01-01 15:30:00")) conflicts
with existing key (room, during)=(123A, ["2010-01-01 14:00:00","2010-01-01 15:00:00")).
INSERT INTO room_reservation VALUES
(’123B’, ’[2010-01-01 14:30, 2010-01-01 15:30)’);
INSERT 0 1
166
Chapter 8. Data Types
8.18. Object Identifier Types
Objectidentifiers (OIDs) areusedinternallybyPostgreSQL as primarykeys for various system tables.
OIDs are not added to user-created tables, unless
WITH OIDS
is specified when the table is created,
or the default_with_oids configuration variable is enabled. Type
oid
represents an object identifier.
There are also several alias types for
oid
:
regproc
,
regprocedure
,
regoper
,
regoperator
,
regclass
,
regtype
,
regconfig
,and
regdictionary
.Table 8-24 shows an overview.
The
oid
type is currently implemented as an unsigned four-byte integer. Therefore, it is not large
enough to provide database-wide uniqueness in large databases, or even inlarge individualtables. So,
usinga user-created table’s OID column as a primary key is discouraged. OIDs are best used only for
references to system tables.
The
oid
type itself has few operations beyond comparison. It can be cast to integer, however, and
then manipulated using the standard integer operators. (Beware of possible signed-versus-unsigned
confusion if you do this.)
The OID alias types have no operations of their own except for specialized input and output routines.
These routines are able to accept and display symbolic names for system objects, rather than the raw
numeric value that type
oid
would use. The alias types allow simplified lookup of OID values for
objects. For example, to examine the
pg_attribute
rows related to a table
mytable
,one could
write:
SELECT
*
FROM pg_attribute WHERE attrelid = ’mytable’::regclass;
rather than:
SELECT
*
FROM pg_attribute
WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = ’mytable’);
While that doesn’t look all that bad by itself, it’s still oversimplified. A far more complicated sub-
select would be needed to select the right OID if there are multiple tables named
mytable
in differ-
ent schemas. The
regclass
input converter handles the table lookup according to the schema path
setting, and so it does the “right thing” automatically. Similarly, casting a table’s OID to
regclass
is handy for symbolic display of a numeric OID.
Table 8-24. Object Identifier Types
Name
References
Description
Value Example
oid
any
numeric object
identifier
564182
regproc
pg_proc
function name
sum
regprocedure
pg_proc
function with argument
types
sum(int4)
regoper
pg_operator
operator name
+
regoperator
pg_operator
operator with argument
types
*
(integer,integer)
or
-(NONE,integer)
regclass
pg_class
relation name
pg_type
regtype
pg_type
data type name
integer
167
Documents you may be interested
Documents you may be interested