Hackfut Security File Manager
Current Path:
/opt/alt/postgresql11/usr/share/doc/alt-postgresql11-9.2.24/html
opt
/
alt
/
postgresql11
/
usr
/
share
/
doc
/
alt-postgresql11-9.2.24
/
html
/
📁
..
📄
LEGALNOTICE.html
(2.62 KB)
📄
acronyms.html
(15.9 KB)
📄
admin.html
(12.27 KB)
📄
adminpack.html
(7.7 KB)
📄
app-clusterdb.html
(10.35 KB)
📄
app-createdb.html
(12.55 KB)
📄
app-createlang.html
(9.67 KB)
📄
app-createuser.html
(15.27 KB)
📄
app-dropdb.html
(9.42 KB)
📄
app-droplang.html
(9.41 KB)
📄
app-dropuser.html
(9.37 KB)
📄
app-ecpg.html
(8.51 KB)
📄
app-initdb.html
(15.04 KB)
📄
app-pg-ctl.html
(21.93 KB)
📄
app-pg-dumpall.html
(20.22 KB)
📄
app-pgbasebackup.html
(19.37 KB)
📄
app-pgconfig.html
(10.83 KB)
📄
app-pgcontroldata.html
(3.89 KB)
📄
app-pgdump.html
(42.93 KB)
📄
app-pgreceivexlog.html
(10.8 KB)
📄
app-pgresetxlog.html
(11.29 KB)
📄
app-pgrestore.html
(29.56 KB)
📄
app-postgres.html
(31.08 KB)
📄
app-postmaster.html
(2.93 KB)
📄
app-psql.html
(135.62 KB)
📄
app-reindexdb.html
(11.02 KB)
📄
app-vacuumdb.html
(12.32 KB)
📄
appendixes.html
(25.71 KB)
📄
applevel-consistency.html
(10.07 KB)
📄
archive-recovery-settings.html
(7.17 KB)
📄
arrays.html
(27.42 KB)
📄
auth-delay.html
(3.69 KB)
📄
auth-methods.html
(35.35 KB)
📄
auth-pg-hba-conf.html
(29.06 KB)
📄
auth-username-maps.html
(8.4 KB)
📄
auto-explain.html
(9.66 KB)
📄
backup-dump.html
(15.55 KB)
📄
backup-file.html
(7.81 KB)
📄
backup.html
(4.38 KB)
📄
biblio.html
(11.28 KB)
📄
bki-commands.html
(9.42 KB)
📄
bki-example.html
(2.98 KB)
📄
bki-format.html
(3.38 KB)
📄
bki-structure.html
(4.22 KB)
📄
bki.html
(4.23 KB)
📄
bookindex.html
(237.47 KB)
📄
btree-gin.html
(4.49 KB)
📄
btree-gist.html
(6.72 KB)
📄
bug-reporting.html
(18.21 KB)
📄
catalog-pg-aggregate.html
(5.37 KB)
📄
catalog-pg-am.html
(10.3 KB)
📄
catalog-pg-amop.html
(7.42 KB)
📄
catalog-pg-amproc.html
(4.77 KB)
📄
catalog-pg-attrdef.html
(4.26 KB)
📄
catalog-pg-attribute.html
(10.05 KB)
📄
catalog-pg-auth-members.html
(4.16 KB)
📄
catalog-pg-authid.html
(6.66 KB)
📄
catalog-pg-cast.html
(6.79 KB)
📄
catalog-pg-class.html
(12.36 KB)
📄
catalog-pg-collation.html
(5.76 KB)
📄
catalog-pg-constraint.html
(11.31 KB)
📄
catalog-pg-conversion.html
(4.33 KB)
📄
catalog-pg-database.html
(6.86 KB)
📄
catalog-pg-db-role-setting.html
(3.97 KB)
📄
catalog-pg-default-acl.html
(5.14 KB)
📄
catalog-pg-depend.html
(8.43 KB)
📄
catalog-pg-description.html
(4.37 KB)
📄
catalog-pg-enum.html
(4.61 KB)
📄
catalog-pg-extension.html
(5.16 KB)
📄
catalog-pg-foreign-data-wrapper.html
(4.83 KB)
📄
catalog-pg-foreign-server.html
(4.58 KB)
📄
catalog-pg-foreign-table.html
(3.94 KB)
📄
catalog-pg-index.html
(8.66 KB)
📄
catalog-pg-inherits.html
(3.8 KB)
📄
catalog-pg-language.html
(5.81 KB)
📄
catalog-pg-largeobject-metadata.html
(3.54 KB)
📄
catalog-pg-largeobject.html
(5.03 KB)
📄
catalog-pg-namespace.html
(3.66 KB)
📄
catalog-pg-opclass.html
(5.73 KB)
📄
catalog-pg-operator.html
(6.49 KB)
📄
catalog-pg-opfamily.html
(4.7 KB)
📄
catalog-pg-pltemplate.html
(5.24 KB)
📄
catalog-pg-proc.html
(13.09 KB)
📄
catalog-pg-range.html
(5.06 KB)
📄
catalog-pg-rewrite.html
(5.26 KB)
📄
catalog-pg-seclabel.html
(4.41 KB)
📄
catalog-pg-shdepend.html
(6.88 KB)
📄
catalog-pg-shdescription.html
(4.15 KB)
📄
catalog-pg-shseclabel.html
(4.3 KB)
📄
catalog-pg-statistic.html
(9.31 KB)
📄
catalog-pg-tablespace.html
(4.06 KB)
📄
catalog-pg-trigger.html
(8.09 KB)
📄
catalog-pg-ts-config-map.html
(4.09 KB)
📄
catalog-pg-ts-config.html
(4.38 KB)
📄
catalog-pg-ts-dict.html
(4.61 KB)
📄
catalog-pg-ts-parser.html
(4.96 KB)
📄
catalog-pg-ts-template.html
(4.16 KB)
📄
catalog-pg-type.html
(19.44 KB)
📄
catalog-pg-user-mapping.html
(3.76 KB)
📄
catalogs-overview.html
(10.19 KB)
📄
catalogs.html
(10.14 KB)
📄
charset.html
(4.06 KB)
📄
chkpass.html
(4.29 KB)
📄
citext.html
(10.89 KB)
📄
client-authentication-problems.html
(4.13 KB)
📄
client-authentication.html
(5.78 KB)
📄
client-interfaces.html
(13.4 KB)
📄
collation.html
(13.89 KB)
📄
config-setting.html
(10.88 KB)
📄
connect-estab.html
(4.21 KB)
📄
continuous-archiving.html
(48.66 KB)
📄
contrib-dblink-build-sql-delete.html
(5.32 KB)
📄
contrib-dblink-build-sql-insert.html
(5.91 KB)
📄
contrib-dblink-build-sql-update.html
(6.13 KB)
📄
contrib-dblink-cancel-query.html
(3.73 KB)
📄
contrib-dblink-close.html
(4.54 KB)
📄
contrib-dblink-connect-u.html
(4.38 KB)
📄
contrib-dblink-connect.html
(7.15 KB)
📄
contrib-dblink-disconnect.html
(3.63 KB)
📄
contrib-dblink-error-message.html
(3.43 KB)
📄
contrib-dblink-exec.html
(5.34 KB)
📄
contrib-dblink-fetch.html
(5.84 KB)
📄
contrib-dblink-function.html
(8.43 KB)
📄
contrib-dblink-get-connections.html
(3.13 KB)
📄
contrib-dblink-get-notify.html
(4.07 KB)
📄
contrib-dblink-get-pkey.html
(4.39 KB)
📄
contrib-dblink-get-result.html
(6.8 KB)
📄
contrib-dblink-is-busy.html
(3.41 KB)
📄
contrib-dblink-open.html
(5.34 KB)
📄
contrib-dblink-send-query.html
(4.07 KB)
📄
contrib-prog-client.html
(3.35 KB)
📄
contrib-prog-server.html
(3.75 KB)
📄
contrib-prog.html
(3.24 KB)
📄
contrib-spi.html
(10.97 KB)
📄
contrib.html
(8.7 KB)
📄
creating-cluster.html
(12.17 KB)
📄
cube.html
(15.57 KB)
📄
database-roles.html
(5.95 KB)
📄
datatype-binary.html
(12.59 KB)
📄
datatype-bit.html
(4.98 KB)
📄
datatype-boolean.html
(5.14 KB)
📄
datatype-character.html
(11.61 KB)
📄
datatype-datetime.html
(49.57 KB)
📄
datatype-enum.html
(6.28 KB)
📄
datatype-geometric.html
(12.21 KB)
📄
datatype-json.html
(3.36 KB)
📄
datatype-money.html
(5.35 KB)
📄
datatype-net-types.html
(10.18 KB)
📄
datatype-numeric.html
(21.83 KB)
📄
datatype-oid.html
(9.46 KB)
📄
datatype-pseudo.html
(7.11 KB)
📄
datatype-textsearch.html
(9.8 KB)
📄
datatype-uuid.html
(4.45 KB)
📄
datatype-xml.html
(11.07 KB)
📄
datatype.html
(16.22 KB)
📄
datetime-appendix.html
(3.44 KB)
📄
datetime-config-files.html
(8.77 KB)
📄
datetime-input-rules.html
(6.6 KB)
📄
datetime-keywords.html
(4.98 KB)
📄
datetime-units-history.html
(7.46 KB)
📄
dblink.html
(5.2 KB)
📄
ddl-alter.html
(10.25 KB)
📄
ddl-basics.html
(7.63 KB)
📄
ddl-constraints.html
(22.26 KB)
📄
ddl-default.html
(4.43 KB)
📄
ddl-depend.html
(6.35 KB)
📄
ddl-foreign-data.html
(4.38 KB)
📄
ddl-inherit.html
(14.95 KB)
📄
ddl-others.html
(3.01 KB)
📄
ddl-partitioning.html
(27.11 KB)
📄
ddl-priv.html
(5.92 KB)
📄
ddl-schemas.html
(17.62 KB)
📄
ddl-system-columns.html
(7.86 KB)
📄
ddl.html
(6.23 KB)
📄
dict-int.html
(4.68 KB)
📄
dict-xsyn.html
(6.33 KB)
📄
different-replication-solutions.html
(14.45 KB)
📄
disk-full.html
(3.43 KB)
📄
disk-usage.html
(5.53 KB)
📄
diskusage.html
(2.61 KB)
📄
dml-delete.html
(3.48 KB)
📄
dml-insert.html
(5.67 KB)
📄
dml-returning.html
(4.98 KB)
📄
dml-update.html
(5.43 KB)
📄
dml.html
(2.88 KB)
📄
docguide-authoring.html
(6.6 KB)
📄
docguide-build.html
(14.92 KB)
📄
docguide-docbook.html
(3.76 KB)
📄
docguide-style.html
(7.25 KB)
📄
docguide-toolsets.html
(20.2 KB)
📄
docguide.html
(3.54 KB)
📄
dummy-seclabel.html
(4.26 KB)
📄
dynamic-trace.html
(26.6 KB)
📄
earthdistance.html
(8.6 KB)
📄
ecpg-commands.html
(9.3 KB)
📄
ecpg-concept.html
(4.86 KB)
📄
ecpg-connect.html
(10.57 KB)
📄
ecpg-cpp.html
(9.4 KB)
📄
ecpg-descriptors.html
(34.09 KB)
📄
ecpg-develop.html
(7.78 KB)
📄
ecpg-dynamic.html
(6.36 KB)
📄
ecpg-errors.html
(25.13 KB)
📄
ecpg-informix-compat.html
(51.52 KB)
📄
ecpg-library.html
(5.66 KB)
📄
ecpg-lo.html
(5.4 KB)
📄
ecpg-pgtypes.html
(53.18 KB)
📄
ecpg-preproc.html
(8.77 KB)
📄
ecpg-process.html
(5.26 KB)
📄
ecpg-sql-allocate-descriptor.html
(3.89 KB)
📄
ecpg-sql-commands.html
(4.59 KB)
📄
ecpg-sql-connect.html
(9.16 KB)
📄
ecpg-sql-deallocate-descriptor.html
(3.68 KB)
📄
ecpg-sql-declare.html
(5.27 KB)
📄
ecpg-sql-describe.html
(4.49 KB)
📄
ecpg-sql-disconnect.html
(4.62 KB)
📄
ecpg-sql-execute-immediate.html
(3.79 KB)
📄
ecpg-sql-get-descriptor.html
(7.53 KB)
📄
ecpg-sql-open.html
(4.53 KB)
📄
ecpg-sql-prepare.html
(4.08 KB)
📄
ecpg-sql-set-autocommit.html
(3.25 KB)
📄
ecpg-sql-set-connection.html
(3.84 KB)
📄
ecpg-sql-set-descriptor.html
(5.38 KB)
📄
ecpg-sql-type.html
(4.91 KB)
📄
ecpg-sql-var.html
(3.46 KB)
📄
ecpg-sql-whenever.html
(4.58 KB)
📄
ecpg-variables.html
(39.34 KB)
📄
ecpg.html
(10.1 KB)
📄
encryption-options.html
(7.32 KB)
📄
errcodes-appendix.html
(36.1 KB)
📄
error-message-reporting.html
(13.79 KB)
📄
error-style-guide.html
(16.38 KB)
📄
event-log-registration.html
(4.09 KB)
📄
executor.html
(6.46 KB)
📄
explicit-joins.html
(10.76 KB)
📄
explicit-locking.html
(24.49 KB)
📄
extend-extensions.html
(31.67 KB)
📄
extend-how.html
(4.45 KB)
📄
extend-pgxs.html
(11.49 KB)
📄
extend-type-system.html
(9.87 KB)
📄
extend.html
(9.75 KB)
📄
external-admin-tools.html
(2.66 KB)
📄
external-extensions.html
(3.19 KB)
📄
external-interfaces.html
(5.38 KB)
📄
external-pl.html
(4.56 KB)
📄
external-projects.html
(2.93 KB)
📄
fdw-callbacks.html
(12.6 KB)
📄
fdw-functions.html
(4.39 KB)
📄
fdw-helpers.html
(5.85 KB)
📄
fdw-planning.html
(9.61 KB)
📄
fdwhandler.html
(3.9 KB)
📄
features-sql-standard.html
(38.19 KB)
📄
features.html
(7.39 KB)
📄
file-fdw.html
(7.53 KB)
📄
functions-admin.html
(49.21 KB)
📄
functions-aggregate.html
(21.3 KB)
📄
functions-array.html
(13.2 KB)
📄
functions-binarystring.html
(12.29 KB)
📄
functions-bitstring.html
(6.63 KB)
📄
functions-comparison.html
(10.39 KB)
📄
functions-comparisons.html
(13.21 KB)
📄
functions-conditional.html
(10.75 KB)
📄
functions-datetime.html
(47.17 KB)
📄
functions-enum.html
(5.36 KB)
📄
functions-formatting.html
(34.57 KB)
📄
functions-geometry.html
(19.87 KB)
📄
functions-info.html
(57.28 KB)
📄
functions-json.html
(3.72 KB)
📄
functions-logical.html
(4.56 KB)
📄
functions-matching.html
(73.95 KB)
📄
functions-math.html
(19.92 KB)
📄
functions-net.html
(13.19 KB)
📄
functions-range.html
(10.6 KB)
📄
functions-sequence.html
(12.62 KB)
📄
functions-srf.html
(8.63 KB)
📄
functions-string.html
(57.67 KB)
📄
functions-subquery.html
(16 KB)
📄
functions-textsearch.html
(20.01 KB)
📄
functions-trigger.html
(4.44 KB)
📄
functions-window.html
(11.8 KB)
📄
functions-xml.html
(31.42 KB)
📄
functions.html
(9.71 KB)
📄
fuzzystrmatch.html
(7.87 KB)
📄
geqo-biblio.html
(3.38 KB)
📄
geqo-intro.html
(4.31 KB)
📄
geqo-intro2.html
(5.5 KB)
📄
geqo-pg-intro.html
(8.58 KB)
📄
geqo.html
(3.53 KB)
📄
gin-examples.html
(3.24 KB)
📄
gin-extensibility.html
(14.06 KB)
📄
gin-implementation.html
(6.41 KB)
📄
gin-intro.html
(4.55 KB)
📄
gin-limit.html
(2.75 KB)
📄
gin-tips.html
(5.58 KB)
📄
gin.html
(2.86 KB)
📄
gist-examples.html
(3.66 KB)
📄
gist-extensibility.html
(23.78 KB)
📄
gist-implementation.html
(4 KB)
📄
gist-intro.html
(3.53 KB)
📄
gist.html
(2.62 KB)
📄
git.html
(4.46 KB)
📄
high-availability.html
(7.52 KB)
📄
history.html
(11.64 KB)
📄
hot-standby.html
(35.2 KB)
📄
hstore.html
(22.1 KB)
📄
index-catalog.html
(7.81 KB)
📄
index-cost-estimation.html
(9.76 KB)
📄
index-functions.html
(18.67 KB)
📄
index-locking.html
(7.86 KB)
📄
index-scanning.html
(10.46 KB)
📄
index-unique-checks.html
(8.98 KB)
📄
index.html
(7.88 KB)
📄
indexam.html
(5.12 KB)
📄
indexes-bitmap-scans.html
(6.43 KB)
📄
indexes-collations.html
(3.55 KB)
📄
indexes-examine.html
(6.99 KB)
📄
indexes-expressional.html
(4.7 KB)
📄
indexes-intro.html
(6.17 KB)
📄
indexes-multicolumn.html
(6.15 KB)
📄
indexes-opclass.html
(7.16 KB)
📄
indexes-ordering.html
(6.33 KB)
📄
indexes-partial.html
(11.54 KB)
📄
indexes-types.html
(9.99 KB)
📄
indexes-unique.html
(3.91 KB)
📄
indexes.html
(3.53 KB)
📄
information-schema.html
(10.92 KB)
📄
infoschema-administrable-role-authorizations.html
(3.66 KB)
📄
infoschema-applicable-roles.html
(3.88 KB)
📄
infoschema-attributes.html
(12.51 KB)
📄
infoschema-character-sets.html
(6.88 KB)
📄
infoschema-check-constraint-routine-usage.html
(4.25 KB)
📄
infoschema-check-constraints.html
(3.79 KB)
📄
infoschema-collation-character-set-applicab.html
(4.32 KB)
📄
infoschema-collations.html
(3.79 KB)
📄
infoschema-column-domain-usage.html
(4.22 KB)
📄
infoschema-column-options.html
(4.01 KB)
📄
infoschema-column-privileges.html
(4.91 KB)
📄
infoschema-column-udt-usage.html
(4.48 KB)
📄
infoschema-columns.html
(17.21 KB)
📄
infoschema-constraint-column-usage.html
(4.76 KB)
📄
infoschema-constraint-table-usage.html
(4.66 KB)
📄
infoschema-data-type-privileges.html
(4.97 KB)
📄
infoschema-datatypes.html
(4.13 KB)
📄
infoschema-domain-constraints.html
(4.55 KB)
📄
infoschema-domain-udt-usage.html
(4.07 KB)
📄
infoschema-domains.html
(11.1 KB)
📄
infoschema-element-types.html
(11.11 KB)
📄
infoschema-enabled-roles.html
(3.69 KB)
📄
infoschema-foreign-data-wrapper-options.html
(3.82 KB)
📄
infoschema-foreign-data-wrappers.html
(4.13 KB)
📄
infoschema-foreign-server-options.html
(3.76 KB)
📄
infoschema-foreign-servers.html
(4.46 KB)
📄
infoschema-foreign-table-options.html
(3.88 KB)
📄
infoschema-foreign-tables.html
(3.98 KB)
📄
infoschema-information-schema-catalog-name.html
(3.28 KB)
📄
infoschema-key-column-usage.html
(5.06 KB)
📄
infoschema-parameters.html
(10.55 KB)
📄
infoschema-referential-constraints.html
(5.53 KB)
📄
infoschema-role-column-grants.html
(4.9 KB)
📄
infoschema-role-routine-grants.html
(5.23 KB)
📄
infoschema-role-table-grants.html
(5.3 KB)
📄
infoschema-role-udt-grants.html
(4.67 KB)
📄
infoschema-role-usage-grants.html
(4.89 KB)
📄
infoschema-routine-privileges.html
(4.91 KB)
📄
infoschema-routines.html
(22.51 KB)
📄
infoschema-schema.html
(3.11 KB)
📄
infoschema-schemata.html
(4.15 KB)
📄
infoschema-sequences.html
(5.97 KB)
📄
infoschema-sql-features.html
(4.6 KB)
📄
infoschema-sql-implementation-info.html
(4.4 KB)
📄
infoschema-sql-languages.html
(4.97 KB)
📄
infoschema-sql-packages.html
(4.08 KB)
📄
infoschema-sql-parts.html
(3.98 KB)
📄
infoschema-sql-sizing-profiles.html
(4.08 KB)
📄
infoschema-sql-sizing.html
(4 KB)
📄
infoschema-table-constraints.html
(4.8 KB)
📄
infoschema-table-privileges.html
(4.98 KB)
📄
infoschema-tables.html
(5.82 KB)
📄
infoschema-triggered-update-columns.html
(4.45 KB)
📄
infoschema-triggers.html
(9.23 KB)
📄
infoschema-udt-privileges.html
(4.4 KB)
📄
infoschema-usage-privileges.html
(5.38 KB)
📄
infoschema-user-defined-types.html
(9.52 KB)
📄
infoschema-user-mapping-options.html
(4.34 KB)
📄
infoschema-user-mappings.html
(3.74 KB)
📄
infoschema-view-column-usage.html
(4.62 KB)
📄
infoschema-view-routine-usage.html
(4.27 KB)
📄
infoschema-view-table-usage.html
(4.29 KB)
📄
infoschema-views.html
(5.4 KB)
📄
install-getsource.html
(3.49 KB)
📄
install-post.html
(7.89 KB)
📄
install-procedure.html
(45.44 KB)
📄
install-requirements.html
(14.14 KB)
📄
install-short.html
(2.8 KB)
📄
install-windows-full.html
(18.82 KB)
📄
install-windows-libpq.html
(6.14 KB)
📄
install-windows.html
(6.46 KB)
📄
installation-platform-notes.html
(38.46 KB)
📄
installation.html
(4.06 KB)
📄
intagg.html
(6.11 KB)
📄
intarray.html
(13.43 KB)
📄
internals.html
(15.27 KB)
📄
intro-whatis.html
(3.92 KB)
📄
isn.html
(13.04 KB)
📄
kernel-resources.html
(36.94 KB)
📄
largeobjects.html
(4.57 KB)
📄
libpq-async.html
(20.53 KB)
📄
libpq-build.html
(6.22 KB)
📄
libpq-cancel.html
(6.62 KB)
📄
libpq-connect.html
(50.05 KB)
📄
libpq-control.html
(6.13 KB)
📄
libpq-copy.html
(21.92 KB)
📄
libpq-envars.html
(9.59 KB)
📄
libpq-events.html
(22.55 KB)
📄
libpq-example.html
(15.65 KB)
📄
libpq-exec.html
(63.36 KB)
📄
libpq-fastpath.html
(5.98 KB)
📄
libpq-ldap.html
(5.38 KB)
📄
libpq-misc.html
(13.49 KB)
📄
libpq-notice-processing.html
(6.14 KB)
📄
libpq-notify.html
(6.56 KB)
📄
libpq-pgpass.html
(4.75 KB)
📄
libpq-pgservice.html
(3.81 KB)
📄
libpq-single-row-mode.html
(6.2 KB)
📄
libpq-ssl.html
(19.5 KB)
📄
libpq-status.html
(17.28 KB)
📄
libpq-threading.html
(5.41 KB)
📄
libpq.html
(7.73 KB)
📄
lo-examplesect.html
(8.49 KB)
📄
lo-funcs.html
(4.53 KB)
📄
lo-implementation.html
(3.27 KB)
📄
lo-interfaces.html
(14.8 KB)
📄
lo-intro.html
(3.13 KB)
📄
lo.html
(6.47 KB)
📄
locale.html
(13.37 KB)
📄
locking-indexes.html
(4.25 KB)
📄
log-shipping-alternative.html
(10.8 KB)
📄
logfile-maintenance.html
(6.98 KB)
📄
ltree.html
(26.66 KB)
📄
maintenance.html
(5.41 KB)
📄
manage-ag-config.html
(3.66 KB)
📄
manage-ag-createdb.html
(6.16 KB)
📄
manage-ag-dropdb.html
(3.52 KB)
📄
manage-ag-overview.html
(5.02 KB)
📄
manage-ag-tablespaces.html
(9.03 KB)
📄
manage-ag-templatedbs.html
(7.97 KB)
📄
managing-databases.html
(3.2 KB)
📄
monitoring-locks.html
(3.59 KB)
📄
monitoring-ps.html
(6.62 KB)
📄
monitoring-stats.html
(56.7 KB)
📄
monitoring.html
(4.35 KB)
📄
multibyte.html
(31.22 KB)
📄
mvcc-caveats.html
(3.98 KB)
📄
mvcc-intro.html
(4.45 KB)
📄
mvcc.html
(4.2 KB)
📄
nls-programmer.html
(9.84 KB)
📄
nls-translator.html
(14.18 KB)
📄
nls.html
(3.06 KB)
📄
non-durability.html
(4.38 KB)
📄
notation.html
(4.31 KB)
📄
oid2name.html
(11.68 KB)
📄
overview.html
(4 KB)
📄
pageinspect.html
(7.93 KB)
📄
parser-stage.html
(7.93 KB)
📄
passwordcheck.html
(4.68 KB)
📄
performance-tips.html
(4.4 KB)
📄
perm-functions.html
(3.26 KB)
📄
pgarchivecleanup.html
(8.79 KB)
📄
pgbench.html
(30.11 KB)
📄
pgbuffercache.html
(7.53 KB)
📄
pgcrypto.html
(37.89 KB)
📄
pgfreespacemap.html
(5.11 KB)
📄
pgrowlocks.html
(5.94 KB)
📄
pgstandby.html
(14.85 KB)
📄
pgstatstatements.html
(15.69 KB)
📄
pgstattuple.html
(9.23 KB)
📄
pgtestfsync.html
(5.13 KB)
📄
pgtesttiming.html
(12.18 KB)
📄
pgtrgm.html
(12.04 KB)
📄
pgupgrade.html
(24.16 KB)
📄
planner-optimizer.html
(9.18 KB)
📄
planner-stats-details.html
(3.2 KB)
📄
planner-stats-security.html
(5.43 KB)
📄
planner-stats.html
(8.85 KB)
📄
plhandler.html
(13.43 KB)
📄
plperl-builtins.html
(17.85 KB)
📄
plperl-data.html
(2.81 KB)
📄
plperl-funcs.html
(13.06 KB)
📄
plperl-global.html
(4.95 KB)
📄
plperl-triggers.html
(6.29 KB)
📄
plperl-trusted.html
(6.55 KB)
📄
plperl-under-the-hood.html
(8.78 KB)
📄
plperl.html
(4.81 KB)
📄
plpgsql-control-structures.html
(45.1 KB)
📄
plpgsql-cursors.html
(24.99 KB)
📄
plpgsql-declarations.html
(21.24 KB)
📄
plpgsql-development-tips.html
(9.29 KB)
📄
plpgsql-errors-and-messages.html
(9.86 KB)
📄
plpgsql-expressions.html
(4.55 KB)
📄
plpgsql-implementation.html
(17.62 KB)
📄
plpgsql-overview.html
(8.82 KB)
📄
plpgsql-porting.html
(26.46 KB)
📄
plpgsql-statements.html
(31.47 KB)
📄
plpgsql-structure.html
(8.13 KB)
📄
plpgsql-trigger.html
(21.8 KB)
📄
plpgsql.html
(6.8 KB)
📄
plpython-data.html
(14.3 KB)
📄
plpython-database.html
(15.05 KB)
📄
plpython-do.html
(2.71 KB)
📄
plpython-envar.html
(3.79 KB)
📄
plpython-funcs.html
(5.35 KB)
📄
plpython-python23.html
(7.04 KB)
📄
plpython-sharing.html
(2.96 KB)
📄
plpython-subtransaction.html
(7.7 KB)
📄
plpython-trigger.html
(4.95 KB)
📄
plpython-util.html
(4.98 KB)
📄
plpython.html
(5.92 KB)
📄
pltcl-data.html
(2.84 KB)
📄
pltcl-dbaccess.html
(13.58 KB)
📄
pltcl-functions.html
(6.03 KB)
📄
pltcl-global.html
(4.95 KB)
📄
pltcl-overview.html
(5.16 KB)
📄
pltcl-procnames.html
(3.15 KB)
📄
pltcl-trigger.html
(9.23 KB)
📄
pltcl-unknown.html
(4.96 KB)
📄
pltcl.html
(3.32 KB)
📄
populate.html
(16.71 KB)
📄
postgres-user.html
(3.24 KB)
📄
preface.html
(4.95 KB)
📄
preventing-server-spoofing.html
(4.5 KB)
📄
protocol-changes.html
(6.49 KB)
📄
protocol-error-fields.html
(5.99 KB)
📄
protocol-flow.html
(45.12 KB)
📄
protocol-message-formats.html
(39.89 KB)
📄
protocol-message-types.html
(4.82 KB)
📄
protocol-overview.html
(9.44 KB)
📄
protocol-replication.html
(14.32 KB)
📄
protocol.html
(5.52 KB)
📄
queries-limit.html
(5.21 KB)
📄
queries-order.html
(7.2 KB)
📄
queries-overview.html
(4.95 KB)
📄
queries-select-lists.html
(9.09 KB)
📄
queries-table-expressions.html
(38.94 KB)
📄
queries-union.html
(4.99 KB)
📄
queries-values.html
(4.81 KB)
📄
queries-with.html
(20.39 KB)
📄
queries.html
(4.31 KB)
📄
query-path.html
(5.34 KB)
📄
querytree.html
(10.88 KB)
📄
rangetypes.html
(22.2 KB)
📄
recovery-config.html
(3.47 KB)
📄
recovery-target-settings.html
(7.58 KB)
📄
reference-client.html
(5.96 KB)
📄
reference-server.html
(3.87 KB)
📄
reference.html
(22.62 KB)
📄
regress-coverage.html
(3.25 KB)
📄
regress-evaluation.html
(12.19 KB)
📄
regress-run.html
(13.39 KB)
📄
regress-variant.html
(7.01 KB)
📄
regress.html
(4.18 KB)
📄
release-0-01.html
(2.5 KB)
📄
release-0-02.html
(4.19 KB)
📄
release-0-03.html
(7.62 KB)
📄
release-1-0.html
(4.13 KB)
📄
release-1-01.html
(9.13 KB)
📄
release-1-02.html
(6.34 KB)
📄
release-1-09.html
(2.47 KB)
📄
release-6-0.html
(7.73 KB)
📄
release-6-1-1.html
(3.63 KB)
📄
release-6-1.html
(8.81 KB)
📄
release-6-2-1.html
(4.3 KB)
📄
release-6-2.html
(8.67 KB)
📄
release-6-3-1.html
(4.34 KB)
📄
release-6-3-2.html
(4.06 KB)
📄
release-6-3.html
(15.93 KB)
📄
release-6-4-1.html
(3.97 KB)
📄
release-6-4-2.html
(2.84 KB)
📄
release-6-4.html
(14.39 KB)
📄
release-6-5-1.html
(3.75 KB)
📄
release-6-5-2.html
(4.01 KB)
📄
release-6-5-3.html
(2.98 KB)
📄
release-6-5.html
(16.98 KB)
📄
release-7-0-1.html
(3.83 KB)
📄
release-7-0-2.html
(2.82 KB)
📄
release-7-0-3.html
(4.55 KB)
📄
release-7-0.html
(22.56 KB)
📄
release-7-1-1.html
(3.19 KB)
📄
release-7-1-2.html
(2.91 KB)
📄
release-7-1-3.html
(3.07 KB)
📄
release-7-1.html
(12.71 KB)
📄
release-7-2-1.html
(3.92 KB)
📄
release-7-2-2.html
(3.7 KB)
📄
release-7-2-3.html
(3.29 KB)
📄
release-7-2-4.html
(3.5 KB)
📄
release-7-2-5.html
(3.66 KB)
📄
release-7-2-6.html
(3.54 KB)
📄
release-7-2-7.html
(3.64 KB)
📄
release-7-2-8.html
(3.86 KB)
📄
release-7-2.html
(26.46 KB)
📄
release-7-3-1.html
(4.07 KB)
📄
release-7-3-10.html
(7.32 KB)
📄
release-7-3-11.html
(4.01 KB)
📄
release-7-3-12.html
(3.44 KB)
📄
release-7-3-13.html
(4.51 KB)
📄
release-7-3-14.html
(3.84 KB)
📄
release-7-3-15.html
(6.17 KB)
📄
release-7-3-16.html
(3.34 KB)
📄
release-7-3-17.html
(3.47 KB)
📄
release-7-3-18.html
(3.56 KB)
📄
release-7-3-19.html
(3.6 KB)
📄
release-7-3-2.html
(5.08 KB)
📄
release-7-3-20.html
(3.44 KB)
📄
release-7-3-21.html
(6.07 KB)
📄
release-7-3-3.html
(10.05 KB)
📄
release-7-3-4.html
(3.42 KB)
📄
release-7-3-5.html
(4.39 KB)
📄
release-7-3-6.html
(4.32 KB)
📄
release-7-3-7.html
(3.27 KB)
📄
release-7-3-8.html
(3.49 KB)
📄
release-7-3-9.html
(3.98 KB)
📄
release-7-3.html
(32.28 KB)
📄
release-7-4-1.html
(6.95 KB)
📄
release-7-4-10.html
(3.72 KB)
📄
release-7-4-11.html
(4.74 KB)
📄
release-7-4-12.html
(4.12 KB)
📄
release-7-4-13.html
(6.8 KB)
📄
release-7-4-14.html
(3.59 KB)
📄
release-7-4-15.html
(4.17 KB)
📄
release-7-4-16.html
(3.88 KB)
📄
release-7-4-17.html
(3.92 KB)
📄
release-7-4-18.html
(3.83 KB)
📄
release-7-4-19.html
(7.07 KB)
📄
release-7-4-2.html
(8.07 KB)
📄
release-7-4-20.html
(6.45 KB)
📄
release-7-4-21.html
(3.83 KB)
📄
release-7-4-22.html
(3.98 KB)
📄
release-7-4-23.html
(4.32 KB)
📄
release-7-4-24.html
(4.19 KB)
📄
release-7-4-25.html
(4.4 KB)
📄
release-7-4-26.html
(5.33 KB)
📄
release-7-4-27.html
(5.04 KB)
📄
release-7-4-28.html
(5.5 KB)
📄
release-7-4-29.html
(6.8 KB)
📄
release-7-4-3.html
(4.51 KB)
📄
release-7-4-30.html
(6.07 KB)
📄
release-7-4-4.html
(3.99 KB)
📄
release-7-4-5.html
(3.12 KB)
📄
release-7-4-6.html
(4.62 KB)
📄
release-7-4-7.html
(4.17 KB)
📄
release-7-4-8.html
(9.92 KB)
📄
release-7-4-9.html
(5 KB)
📄
release-7-4.html
(56.03 KB)
📄
release-8-0-1.html
(4.63 KB)
📄
release-8-0-10.html
(4.64 KB)
📄
release-8-0-11.html
(3.88 KB)
📄
release-8-0-12.html
(3.06 KB)
📄
release-8-0-13.html
(4.02 KB)
📄
release-8-0-14.html
(4.41 KB)
📄
release-8-0-15.html
(8.89 KB)
📄
release-8-0-16.html
(8.74 KB)
📄
release-8-0-17.html
(3.83 KB)
📄
release-8-0-18.html
(5.45 KB)
📄
release-8-0-19.html
(4.86 KB)
📄
release-8-0-2.html
(9.34 KB)
📄
release-8-0-20.html
(4.21 KB)
📄
release-8-0-21.html
(4.4 KB)
📄
release-8-0-22.html
(6.29 KB)
📄
release-8-0-23.html
(5.88 KB)
📄
release-8-0-24.html
(6.84 KB)
📄
release-8-0-25.html
(7.25 KB)
📄
release-8-0-26.html
(7.84 KB)
📄
release-8-0-3.html
(7.25 KB)
📄
release-8-0-4.html
(6.52 KB)
📄
release-8-0-5.html
(4.7 KB)
📄
release-8-0-6.html
(5.56 KB)
📄
release-8-0-7.html
(5.77 KB)
📄
release-8-0-8.html
(7.06 KB)
📄
release-8-0-9.html
(4.21 KB)
📄
release-8-0.html
(65.25 KB)
📄
release-8-1-1.html
(5.33 KB)
📄
release-8-1-10.html
(4.67 KB)
📄
release-8-1-11.html
(9.71 KB)
📄
release-8-1-12.html
(9.12 KB)
📄
release-8-1-13.html
(4.19 KB)
📄
release-8-1-14.html
(6.74 KB)
📄
release-8-1-15.html
(6.13 KB)
📄
release-8-1-16.html
(5.15 KB)
📄
release-8-1-17.html
(5.89 KB)
📄
release-8-1-18.html
(6.29 KB)
📄
release-8-1-19.html
(6.46 KB)
📄
release-8-1-2.html
(6.19 KB)
📄
release-8-1-20.html
(7.13 KB)
📄
release-8-1-21.html
(7.04 KB)
📄
release-8-1-22.html
(8.13 KB)
📄
release-8-1-23.html
(7.75 KB)
📄
release-8-1-3.html
(6.86 KB)
📄
release-8-1-4.html
(8.67 KB)
📄
release-8-1-5.html
(5.35 KB)
📄
release-8-1-6.html
(5.21 KB)
📄
release-8-1-7.html
(4.45 KB)
📄
release-8-1-8.html
(3.04 KB)
📄
release-8-1-9.html
(4.29 KB)
📄
release-8-1.html
(60.66 KB)
📄
release-8-2-1.html
(4.95 KB)
📄
release-8-2-10.html
(7.99 KB)
📄
release-8-2-11.html
(6.98 KB)
📄
release-8-2-12.html
(6.59 KB)
📄
release-8-2-13.html
(7.18 KB)
📄
release-8-2-14.html
(7.69 KB)
📄
release-8-2-15.html
(7.96 KB)
📄
release-8-2-16.html
(9.08 KB)
📄
release-8-2-17.html
(8.02 KB)
📄
release-8-2-18.html
(10.04 KB)
📄
release-8-2-19.html
(8.39 KB)
📄
release-8-2-2.html
(5.67 KB)
📄
release-8-2-20.html
(6.1 KB)
📄
release-8-2-21.html
(5.46 KB)
📄
release-8-2-22.html
(9.39 KB)
📄
release-8-2-23.html
(9.33 KB)
📄
release-8-2-3.html
(3.02 KB)
📄
release-8-2-4.html
(5.3 KB)
📄
release-8-2-5.html
(5.85 KB)
📄
release-8-2-6.html
(10.3 KB)
📄
release-8-2-7.html
(9.09 KB)
📄
release-8-2-8.html
(7.34 KB)
📄
release-8-2-9.html
(4.18 KB)
📄
release-8-2.html
(67.77 KB)
📄
release-8-3-1.html
(10.34 KB)
📄
release-8-3-10.html
(10.47 KB)
📄
release-8-3-11.html
(8.75 KB)
📄
release-8-3-12.html
(11.83 KB)
📄
release-8-3-13.html
(9.28 KB)
📄
release-8-3-14.html
(6.1 KB)
📄
release-8-3-15.html
(6.23 KB)
📄
release-8-3-16.html
(10.76 KB)
📄
release-8-3-17.html
(10.34 KB)
📄
release-8-3-18.html
(11 KB)
📄
release-8-3-19.html
(8.27 KB)
📄
release-8-3-2.html
(11.92 KB)
📄
release-8-3-20.html
(9.03 KB)
📄
release-8-3-21.html
(4.92 KB)
📄
release-8-3-22.html
(10.34 KB)
📄
release-8-3-23.html
(6.14 KB)
📄
release-8-3-3.html
(4.17 KB)
📄
release-8-3-4.html
(11.01 KB)
📄
release-8-3-5.html
(8.49 KB)
📄
release-8-3-6.html
(8.98 KB)
📄
release-8-3-7.html
(9.5 KB)
📄
release-8-3-8.html
(9.04 KB)
📄
release-8-3-9.html
(9.97 KB)
📄
release-8-3.html
(68.14 KB)
📄
release-8-4-1.html
(9.34 KB)
📄
release-8-4-10.html
(11.65 KB)
📄
release-8-4-11.html
(13.46 KB)
📄
release-8-4-12.html
(9.75 KB)
📄
release-8-4-13.html
(9.49 KB)
📄
release-8-4-14.html
(5 KB)
📄
release-8-4-15.html
(10.38 KB)
📄
release-8-4-16.html
(7.16 KB)
📄
release-8-4-17.html
(9.35 KB)
📄
release-8-4-18.html
(6.88 KB)
📄
release-8-4-19.html
(7.6 KB)
📄
release-8-4-2.html
(15.33 KB)
📄
release-8-4-20.html
(15.88 KB)
📄
release-8-4-21.html
(5.32 KB)
📄
release-8-4-22.html
(11.04 KB)
📄
release-8-4-3.html
(13.6 KB)
📄
release-8-4-4.html
(10.48 KB)
📄
release-8-4-5.html
(15.56 KB)
📄
release-8-4-6.html
(10.19 KB)
📄
release-8-4-7.html
(6.07 KB)
📄
release-8-4-8.html
(8.64 KB)
📄
release-8-4-9.html
(14.19 KB)
📄
release-8-4.html
(85.91 KB)
📄
release-9-0-1.html
(5.81 KB)
📄
release-9-0-10.html
(5.56 KB)
📄
release-9-0-11.html
(12.37 KB)
📄
release-9-0-12.html
(8.62 KB)
📄
release-9-0-13.html
(11.4 KB)
📄
release-9-0-14.html
(8.55 KB)
📄
release-9-0-15.html
(8.93 KB)
📄
release-9-0-16.html
(17 KB)
📄
release-9-0-17.html
(6.19 KB)
📄
release-9-0-18.html
(11.6 KB)
📄
release-9-0-19.html
(25.99 KB)
📄
release-9-0-2.html
(13.32 KB)
📄
release-9-0-20.html
(15.46 KB)
📄
release-9-0-21.html
(5.04 KB)
📄
release-9-0-22.html
(4.22 KB)
📄
release-9-0-23.html
(15.78 KB)
📄
release-9-0-3.html
(7.09 KB)
📄
release-9-0-4.html
(11.08 KB)
📄
release-9-0-5.html
(17.5 KB)
📄
release-9-0-6.html
(13.11 KB)
📄
release-9-0-7.html
(17.67 KB)
📄
release-9-0-8.html
(10.74 KB)
📄
release-9-0-9.html
(11.47 KB)
📄
release-9-0.html
(93.87 KB)
📄
release-9-1-1.html
(3.58 KB)
📄
release-9-1-10.html
(10.11 KB)
📄
release-9-1-11.html
(9.36 KB)
📄
release-9-1-12.html
(18.12 KB)
📄
release-9-1-13.html
(6.53 KB)
📄
release-9-1-14.html
(12.73 KB)
📄
release-9-1-15.html
(28.29 KB)
📄
release-9-1-16.html
(18.67 KB)
📄
release-9-1-17.html
(4.83 KB)
📄
release-9-1-18.html
(4.01 KB)
📄
release-9-1-19.html
(17.2 KB)
📄
release-9-1-2.html
(21.07 KB)
📄
release-9-1-20.html
(17.13 KB)
📄
release-9-1-21.html
(7.42 KB)
📄
release-9-1-22.html
(7.09 KB)
📄
release-9-1-23.html
(12.36 KB)
📄
release-9-1-24.html
(8.53 KB)
📄
release-9-1-3.html
(20.66 KB)
📄
release-9-1-4.html
(15.64 KB)
📄
release-9-1-5.html
(13.71 KB)
📄
release-9-1-6.html
(9.3 KB)
📄
release-9-1-7.html
(14.59 KB)
📄
release-9-1-8.html
(9.92 KB)
📄
release-9-1-9.html
(12.38 KB)
📄
release-9-1.html
(77.11 KB)
📄
release-9-2-1.html
(6.94 KB)
📄
release-9-2-10.html
(31.61 KB)
📄
release-9-2-11.html
(19.82 KB)
📄
release-9-2-12.html
(5.01 KB)
📄
release-9-2-13.html
(4.01 KB)
📄
release-9-2-14.html
(17.96 KB)
📄
release-9-2-15.html
(18.17 KB)
📄
release-9-2-16.html
(7.42 KB)
📄
release-9-2-17.html
(8 KB)
📄
release-9-2-18.html
(12.42 KB)
📄
release-9-2-19.html
(10.27 KB)
📄
release-9-2-2.html
(22.46 KB)
📄
release-9-2-20.html
(13.02 KB)
📄
release-9-2-21.html
(13.87 KB)
📄
release-9-2-22.html
(15.49 KB)
📄
release-9-2-23.html
(7.94 KB)
📄
release-9-2-24.html
(7.69 KB)
📄
release-9-2-3.html
(13.06 KB)
📄
release-9-2-4.html
(14.45 KB)
📄
release-9-2-5.html
(11.72 KB)
📄
release-9-2-6.html
(11.41 KB)
📄
release-9-2-7.html
(19.55 KB)
📄
release-9-2-8.html
(7.2 KB)
📄
release-9-2-9.html
(15.25 KB)
📄
release-9-2.html
(77.66 KB)
📄
release.html
(22.35 KB)
📄
resources.html
(4.13 KB)
📄
role-attributes.html
(7.67 KB)
📄
role-membership.html
(8.19 KB)
📄
role-removal.html
(5.18 KB)
📄
routine-reindex.html
(3.54 KB)
📄
routine-vacuuming.html
(37.13 KB)
📄
row-estimation-examples.html
(20.28 KB)
📄
rowtypes.html
(22.86 KB)
📄
rule-system.html
(4.02 KB)
📄
rules-privileges.html
(11.39 KB)
📄
rules-status.html
(4.41 KB)
📄
rules-triggers.html
(9.25 KB)
📄
rules-update.html
(31.85 KB)
📄
rules-views.html
(26.26 KB)
📄
rules.html
(4.83 KB)
📄
runtime-config-autovacuum.html
(10.72 KB)
📄
runtime-config-client.html
(32.05 KB)
📄
runtime-config-compatible.html
(14.48 KB)
📄
runtime-config-connection.html
(22.93 KB)
📄
runtime-config-custom.html
(3.46 KB)
📄
runtime-config-developer.html
(13.74 KB)
📄
runtime-config-error-handling.html
(3.49 KB)
📄
runtime-config-file-locations.html
(6.81 KB)
📄
runtime-config-locks.html
(7.46 KB)
📄
runtime-config-logging.html
(44.38 KB)
📄
runtime-config-preset.html
(8.51 KB)
📄
runtime-config-query.html
(24.37 KB)
📄
runtime-config-replication.html
(17.87 KB)
📄
runtime-config-resource.html
(27.25 KB)
📄
runtime-config-short.html
(6.53 KB)
📄
runtime-config-statistics.html
(8.41 KB)
📄
runtime-config-wal.html
(26.46 KB)
📄
runtime-config.html
(8.06 KB)
📄
runtime.html
(5.12 KB)
📄
seg.html
(15.11 KB)
📄
sepgsql.html
(30.11 KB)
📄
server-programming.html
(9.39 KB)
📄
server-shutdown.html
(6.32 KB)
📄
server-start.html
(13.88 KB)
📄
source-format.html
(5.01 KB)
📄
source.html
(3.98 KB)
📄
sourcerepo.html
(3.33 KB)
📄
spgist-examples.html
(2.64 KB)
📄
spgist-extensibility.html
(30.55 KB)
📄
spgist-implementation.html
(7.91 KB)
📄
spgist-intro.html
(4.22 KB)
📄
spgist.html
(2.9 KB)
📄
spi-examples.html
(6.07 KB)
📄
spi-interface-support.html
(3.68 KB)
📄
spi-interface.html
(5.86 KB)
📄
spi-memory.html
(6.92 KB)
📄
spi-realloc.html
(3.54 KB)
📄
spi-spi-connect.html
(3.96 KB)
📄
spi-spi-copytuple.html
(3.37 KB)
📄
spi-spi-cursor-close.html
(3.26 KB)
📄
spi-spi-cursor-fetch.html
(4.01 KB)
📄
spi-spi-cursor-find.html
(3.38 KB)
📄
spi-spi-cursor-move.html
(3.8 KB)
📄
spi-spi-cursor-open-with-args.html
(6.03 KB)
📄
spi-spi-cursor-open-with-paramlist.html
(4.92 KB)
📄
spi-spi-cursor-open.html
(5.6 KB)
📄
spi-spi-exec.html
(3.51 KB)
📄
spi-spi-execp.html
(4.75 KB)
📄
spi-spi-execute-plan-with-paramlist.html
(4.78 KB)
📄
spi-spi-execute-plan.html
(5.76 KB)
📄
spi-spi-execute-with-args.html
(6.08 KB)
📄
spi-spi-execute.html
(12.3 KB)
📄
spi-spi-finish.html
(3.57 KB)
📄
spi-spi-fname.html
(3.68 KB)
📄
spi-spi-fnumber.html
(3.84 KB)
📄
spi-spi-freeplan.html
(3.42 KB)
📄
spi-spi-freetuple.html
(3.2 KB)
📄
spi-spi-freetupletable.html
(3.54 KB)
📄
spi-spi-getargcount.html
(3.61 KB)
📄
spi-spi-getargtypeid.html
(4.04 KB)
📄
spi-spi-getbinval.html
(4.19 KB)
📄
spi-spi-getnspname.html
(3.39 KB)
📄
spi-spi-getrelname.html
(3.27 KB)
📄
spi-spi-gettype.html
(3.63 KB)
📄
spi-spi-gettypeid.html
(3.63 KB)
📄
spi-spi-getvalue.html
(4.07 KB)
📄
spi-spi-is-cursor-plan.html
(4.45 KB)
📄
spi-spi-keepplan.html
(3.79 KB)
📄
spi-spi-modifytuple.html
(5.5 KB)
📄
spi-spi-palloc.html
(3.08 KB)
📄
spi-spi-pfree.html
(3.2 KB)
📄
spi-spi-pop.html
(2.68 KB)
📄
spi-spi-prepare-cursor.html
(4.94 KB)
📄
spi-spi-prepare-params.html
(4.31 KB)
📄
spi-spi-prepare.html
(7.48 KB)
📄
spi-spi-push.html
(3.65 KB)
📄
spi-spi-returntuple.html
(4 KB)
📄
spi-spi-saveplan.html
(4.47 KB)
📄
spi-spi-scroll-cursor-fetch.html
(4.7 KB)
📄
spi-spi-scroll-cursor-move.html
(4.78 KB)
📄
spi-visibility.html
(4.05 KB)
📄
spi.html
(10.59 KB)
📄
sql-abort.html
(4.08 KB)
📄
sql-alteraggregate.html
(5.97 KB)
📄
sql-altercollation.html
(4.96 KB)
📄
sql-alterconversion.html
(5.05 KB)
📄
sql-alterdatabase.html
(8.57 KB)
📄
sql-alterdefaultprivileges.html
(9.19 KB)
📄
sql-alterdomain.html
(10.85 KB)
📄
sql-alterextension.html
(11.47 KB)
📄
sql-alterforeigndatawrapper.html
(7.21 KB)
📄
sql-alterforeigntable.html
(12.41 KB)
📄
sql-alterfunction.html
(12.54 KB)
📄
sql-altergroup.html
(5.12 KB)
📄
sql-alterindex.html
(7.48 KB)
📄
sql-alterlanguage.html
(3.93 KB)
📄
sql-alterlargeobject.html
(3.64 KB)
📄
sql-alteropclass.html
(4.99 KB)
📄
sql-alteroperator.html
(5.31 KB)
📄
sql-alteropfamily.html
(13.25 KB)
📄
sql-alterrole.html
(12.72 KB)
📄
sql-alterschema.html
(4.21 KB)
📄
sql-altersequence.html
(12.73 KB)
📄
sql-alterserver.html
(5.79 KB)
📄
sql-altertable.html
(42.52 KB)
📄
sql-altertablespace.html
(5.73 KB)
📄
sql-altertrigger.html
(4.54 KB)
📄
sql-altertsconfig.html
(7.94 KB)
📄
sql-altertsdictionary.html
(6.39 KB)
📄
sql-altertsparser.html
(4.16 KB)
📄
sql-altertstemplate.html
(4.12 KB)
📄
sql-altertype.html
(10.93 KB)
📄
sql-alteruser.html
(4.61 KB)
📄
sql-alterusermapping.html
(5.58 KB)
📄
sql-alterview.html
(6.81 KB)
📄
sql-analyze.html
(10.42 KB)
📄
sql-begin.html
(6.54 KB)
📄
sql-checkpoint.html
(3.67 KB)
📄
sql-close.html
(4.87 KB)
📄
sql-cluster.html
(9.18 KB)
📄
sql-commands.html
(18.37 KB)
📄
sql-comment.html
(13.48 KB)
📄
sql-commit-prepared.html
(4.41 KB)
📄
sql-commit.html
(3.9 KB)
📄
sql-copy.html
(36.57 KB)
📄
sql-createaggregate.html
(13.5 KB)
📄
sql-createcast.html
(19.17 KB)
📄
sql-createcollation.html
(6.58 KB)
📄
sql-createconversion.html
(6.38 KB)
📄
sql-createdatabase.html
(11.85 KB)
📄
sql-createdomain.html
(8.34 KB)
📄
sql-createextension.html
(8.87 KB)
📄
sql-createforeigndatawrapper.html
(7.87 KB)
📄
sql-createforeigntable.html
(7.54 KB)
📄
sql-createfunction.html
(30.35 KB)
📄
sql-creategroup.html
(3.92 KB)
📄
sql-createindex.html
(25.33 KB)
📄
sql-createlanguage.html
(14.54 KB)
📄
sql-createopclass.html
(12.38 KB)
📄
sql-createoperator.html
(10.44 KB)
📄
sql-createopfamily.html
(5.49 KB)
📄
sql-createrole.html
(18.87 KB)
📄
sql-createrule.html
(12.36 KB)
📄
sql-createschema.html
(8.12 KB)
📄
sql-createsequence.html
(13.54 KB)
📄
sql-createserver.html
(6.1 KB)
📄
sql-createtable.html
(57.79 KB)
📄
sql-createtableas.html
(12.47 KB)
📄
sql-createtablespace.html
(5.96 KB)
📄
sql-createtrigger.html
(22.63 KB)
📄
sql-createtsconfig.html
(5.23 KB)
📄
sql-createtsdictionary.html
(5.4 KB)
📄
sql-createtsparser.html
(5.81 KB)
📄
sql-createtstemplate.html
(5.31 KB)
📄
sql-createtype.html
(38.54 KB)
📄
sql-createuser.html
(4.42 KB)
📄
sql-createusermapping.html
(5.37 KB)
📄
sql-createview.html
(10.31 KB)
📄
sql-deallocate.html
(3.7 KB)
📄
sql-declare.html
(15.04 KB)
📄
sql-delete.html
(11.5 KB)
📄
sql-discard.html
(4.21 KB)
📄
sql-do.html
(5.08 KB)
📄
sql-drop-owned.html
(4.94 KB)
📄
sql-dropaggregate.html
(4.45 KB)
📄
sql-dropcast.html
(4.24 KB)
📄
sql-dropcollation.html
(4.31 KB)
📄
sql-dropconversion.html
(4.33 KB)
📄
sql-dropdatabase.html
(4.24 KB)
📄
sql-dropdomain.html
(4.16 KB)
📄
sql-dropextension.html
(4.67 KB)
📄
sql-dropforeigndatawrapper.html
(4.42 KB)
📄
sql-dropforeigntable.html
(4.45 KB)
📄
sql-dropfunction.html
(5.7 KB)
📄
sql-dropgroup.html
(2.98 KB)
📄
sql-dropindex.html
(5.06 KB)
📄
sql-droplanguage.html
(4.73 KB)
📄
sql-dropopclass.html
(5.54 KB)
📄
sql-dropoperator.html
(5.1 KB)
📄
sql-dropopfamily.html
(5.16 KB)
📄
sql-droprole.html
(5.04 KB)
📄
sql-droprule.html
(4.05 KB)
📄
sql-dropschema.html
(4.42 KB)
📄
sql-dropsequence.html
(4.26 KB)
📄
sql-dropserver.html
(4.17 KB)
📄
sql-droptable.html
(4.91 KB)
📄
sql-droptablespace.html
(4.48 KB)
📄
sql-droptrigger.html
(4.6 KB)
📄
sql-droptsconfig.html
(4.66 KB)
📄
sql-droptsdictionary.html
(4.58 KB)
📄
sql-droptsparser.html
(4.49 KB)
📄
sql-droptstemplate.html
(4.46 KB)
📄
sql-droptype.html
(4.36 KB)
📄
sql-dropuser.html
(3.11 KB)
📄
sql-dropusermapping.html
(4.57 KB)
📄
sql-dropview.html
(4.16 KB)
📄
sql-end.html
(4.06 KB)
📄
sql-execute.html
(4.95 KB)
📄
sql-explain.html
(16.69 KB)
📄
sql-expressions.html
(46.68 KB)
📄
sql-fetch.html
(13.92 KB)
📄
sql-grant.html
(28.56 KB)
📄
sql-insert.html
(12.56 KB)
📄
sql-keywords-appendix.html
(104.04 KB)
📄
sql-listen.html
(5.76 KB)
📄
sql-load.html
(4.11 KB)
📄
sql-lock.html
(11.59 KB)
📄
sql-move.html
(4.87 KB)
📄
sql-notify.html
(10.69 KB)
📄
sql-prepare-transaction.html
(8.44 KB)
📄
sql-prepare.html
(8.97 KB)
📄
sql-reassign-owned.html
(5.22 KB)
📄
sql-reindex.html
(10.84 KB)
📄
sql-release-savepoint.html
(4.89 KB)
📄
sql-reset.html
(4.88 KB)
📄
sql-revoke.html
(14.53 KB)
📄
sql-rollback-prepared.html
(4.52 KB)
📄
sql-rollback-to.html
(6.25 KB)
📄
sql-rollback.html
(3.9 KB)
📄
sql-savepoint.html
(5.47 KB)
📄
sql-security-label.html
(8.67 KB)
📄
sql-select.html
(77.68 KB)
📄
sql-selectinto.html
(7.46 KB)
📄
sql-set-constraints.html
(6.9 KB)
📄
sql-set-role.html
(6.75 KB)
📄
sql-set-session-authorization.html
(5.92 KB)
📄
sql-set-transaction.html
(12.4 KB)
📄
sql-set.html
(11.77 KB)
📄
sql-show.html
(6.69 KB)
📄
sql-start-transaction.html
(4.87 KB)
📄
sql-syntax-calling-funcs.html
(7.89 KB)
📄
sql-syntax-lexical.html
(42.35 KB)
📄
sql-syntax.html
(5.3 KB)
📄
sql-truncate.html
(9.14 KB)
📄
sql-unlisten.html
(4.81 KB)
📄
sql-update.html
(15.3 KB)
📄
sql-vacuum.html
(10.42 KB)
📄
sql-values.html
(10.39 KB)
📄
sql.html
(13.25 KB)
📄
ssh-tunnels.html
(6.12 KB)
📄
ssl-tcp.html
(13.16 KB)
📄
sslinfo.html
(7.42 KB)
📄
standby-settings.html
(5.3 KB)
📄
storage-file-layout.html
(12.63 KB)
📄
storage-fsm.html
(3.73 KB)
📄
storage-init.html
(2.7 KB)
📄
storage-page-layout.html
(13.57 KB)
📄
storage-toast.html
(11.21 KB)
📄
storage-vm.html
(3.46 KB)
📄
storage.html
(2.88 KB)
📄
stylesheet.css
(1.5 KB)
📄
supported-platforms.html
(4.92 KB)
📄
tablefunc.html
(31.44 KB)
📄
tcn.html
(4.86 KB)
📄
test-parser.html
(4.42 KB)
📄
textsearch-configuration.html
(6.11 KB)
📄
textsearch-controls.html
(26.33 KB)
📄
textsearch-debugging.html
(16.82 KB)
📄
textsearch-dictionaries.html
(30.53 KB)
📄
textsearch-features.html
(20.81 KB)
📄
textsearch-indexes.html
(7.21 KB)
📄
textsearch-intro.html
(18.02 KB)
📄
textsearch-limitations.html
(3.77 KB)
📄
textsearch-migration.html
(4.92 KB)
📄
textsearch-parsers.html
(8.99 KB)
📄
textsearch-psql.html
(9.13 KB)
📄
textsearch-tables.html
(9.52 KB)
📄
textsearch.html
(5.74 KB)
📄
transaction-iso.html
(26.6 KB)
📄
trigger-datachanges.html
(4.95 KB)
📄
trigger-definition.html
(15.14 KB)
📄
trigger-example.html
(7.57 KB)
📄
trigger-interface.html
(10.47 KB)
📄
triggers.html
(3.71 KB)
📄
tsearch2.html
(9.72 KB)
📄
tutorial-accessdb.html
(6.88 KB)
📄
tutorial-advanced-intro.html
(3.26 KB)
📄
tutorial-advanced.html
(2.79 KB)
📄
tutorial-agg.html
(7.42 KB)
📄
tutorial-arch.html
(4.74 KB)
📄
tutorial-concepts.html
(3.75 KB)
📄
tutorial-conclusion.html
(2.78 KB)
📄
tutorial-createdb.html
(8.98 KB)
📄
tutorial-delete.html
(3.43 KB)
📄
tutorial-fk.html
(4.32 KB)
📄
tutorial-inheritance.html
(5.99 KB)
📄
tutorial-install.html
(4.42 KB)
📄
tutorial-join.html
(9.46 KB)
📄
tutorial-populate.html
(4.73 KB)
📄
tutorial-select.html
(7.84 KB)
📄
tutorial-sql-intro.html
(4.79 KB)
📄
tutorial-sql.html
(2.99 KB)
📄
tutorial-start.html
(2.57 KB)
📄
tutorial-table.html
(5.57 KB)
📄
tutorial-transactions.html
(9.71 KB)
📄
tutorial-update.html
(3.08 KB)
📄
tutorial-views.html
(3.3 KB)
📄
tutorial-window.html
(12.19 KB)
📄
tutorial.html
(5.09 KB)
📄
typeconv-func.html
(11.88 KB)
📄
typeconv-oper.html
(14.56 KB)
📄
typeconv-overview.html
(8.11 KB)
📄
typeconv-query.html
(5.32 KB)
📄
typeconv-union-case.html
(6.46 KB)
📄
typeconv.html
(3.63 KB)
📄
unaccent.html
(6.58 KB)
📄
unsupported-features-sql-standard.html
(34.29 KB)
📄
upgrading.html
(12.5 KB)
📄
user-manag.html
(3.89 KB)
📄
using-explain.html
(40.84 KB)
📄
uuid-ossp.html
(7.06 KB)
📄
vacuumlo.html
(7.37 KB)
📄
view-pg-available-extension-versions.html
(4.53 KB)
📄
view-pg-available-extensions.html
(3.85 KB)
📄
view-pg-cursors.html
(5.54 KB)
📄
view-pg-group.html
(3.81 KB)
📄
view-pg-indexes.html
(4.06 KB)
📄
view-pg-locks.html
(14.11 KB)
📄
view-pg-prepared-statements.html
(4.94 KB)
📄
view-pg-prepared-xacts.html
(4.8 KB)
📄
view-pg-roles.html
(5.93 KB)
📄
view-pg-rules.html
(3.91 KB)
📄
view-pg-seclabels.html
(5 KB)
📄
view-pg-settings.html
(10.35 KB)
📄
view-pg-shadow.html
(5.25 KB)
📄
view-pg-stats.html
(8.68 KB)
📄
view-pg-tables.html
(4.72 KB)
📄
view-pg-timezone-abbrevs.html
(3.77 KB)
📄
view-pg-timezone-names.html
(4.08 KB)
📄
view-pg-user-mappings.html
(5.04 KB)
📄
view-pg-user.html
(4.41 KB)
📄
view-pg-views.html
(3.76 KB)
📄
views-overview.html
(6.39 KB)
📄
wal-async-commit.html
(8.8 KB)
📄
wal-configuration.html
(14.61 KB)
📄
wal-internals.html
(6.01 KB)
📄
wal-intro.html
(5.4 KB)
📄
wal-reliability.html
(11.21 KB)
📄
wal.html
(2.86 KB)
📄
warm-standby-failover.html
(5.96 KB)
📄
warm-standby.html
(33.83 KB)
📄
xaggr.html
(9.67 KB)
📄
xfunc-c.html
(76.68 KB)
📄
xfunc-internal.html
(3.91 KB)
📄
xfunc-overload.html
(5.77 KB)
📄
xfunc-pl.html
(2.92 KB)
📄
xfunc-sql.html
(37.14 KB)
📄
xfunc-volatility.html
(9.61 KB)
📄
xfunc.html
(4.41 KB)
📄
xindex.html
(43.55 KB)
📄
xml2.html
(16.5 KB)
📄
xoper-optimization.html
(22.6 KB)
📄
xoper.html
(4.72 KB)
📄
xplang-install.html
(10.87 KB)
📄
xplang.html
(4.14 KB)
📄
xtypes.html
(11.83 KB)
Editing: plpgsql-porting.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Porting from Oracle PL/SQL</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REV="MADE" HREF="mailto:pgsql-docs@postgresql.org"><LINK REL="HOME" TITLE="PostgreSQL 9.2.24 Documentation" HREF="index.html"><LINK REL="UP" TITLE="PL/pgSQL - SQL Procedural Language" HREF="plpgsql.html"><LINK REL="PREVIOUS" TITLE="Tips for Developing in PL/pgSQL" HREF="plpgsql-development-tips.html"><LINK REL="NEXT" TITLE="PL/Tcl - Tcl Procedural Language" HREF="pltcl.html"><LINK REL="STYLESHEET" TYPE="text/css" HREF="stylesheet.css"><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"><META NAME="creation" CONTENT="2017-11-06T22:43:11"></HEAD ><BODY CLASS="SECT1" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="5" ALIGN="center" VALIGN="bottom" ><A HREF="index.html" >PostgreSQL 9.2.24 Documentation</A ></TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="top" ><A TITLE="Tips for Developing in PL/pgSQL" HREF="plpgsql-development-tips.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="10%" ALIGN="left" VALIGN="top" ><A HREF="plpgsql.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="60%" ALIGN="center" VALIGN="bottom" >Chapter 39. <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN > - <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > Procedural Language</TD ><TD WIDTH="20%" ALIGN="right" VALIGN="top" ><A TITLE="PL/Tcl - Tcl Procedural Language" HREF="pltcl.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="SECT1" ><H1 CLASS="SECT1" ><A NAME="PLPGSQL-PORTING" >39.12. Porting from <SPAN CLASS="PRODUCTNAME" >Oracle</SPAN > PL/SQL</A ></H1 ><P > This section explains differences between <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN >'s <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN > language and Oracle's <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > language, to help developers who port applications from <SPAN CLASS="TRADEMARK" >Oracle</SPAN >® to <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN >. </P ><P > <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN > is similar to PL/SQL in many aspects. It is a block-structured, imperative language, and all variables have to be declared. Assignments, loops, conditionals are similar. The main differences you should keep in mind when porting from <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > to <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN > are: <P ></P ></P><UL ><LI ><P > If a name used in a SQL command could be either a column name of a table or a reference to a variable of the function, <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > treats it as a column name. This corresponds to <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN >'s <TT CLASS="LITERAL" >plpgsql.variable_conflict</TT > = <TT CLASS="LITERAL" >use_column</TT > behavior, which is not the default, as explained in <A HREF="plpgsql-implementation.html#PLPGSQL-VAR-SUBST" >Section 39.10.1</A >. It's often best to avoid such ambiguities in the first place, but if you have to port a large amount of code that depends on this behavior, setting <TT CLASS="LITERAL" >variable_conflict</TT > may be the best solution. </P ></LI ><LI ><P > In <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN > the function body must be written as a string literal. Therefore you need to use dollar quoting or escape single quotes in the function body. (See <A HREF="plpgsql-development-tips.html#PLPGSQL-QUOTE-TIPS" >Section 39.11.1</A >.) </P ></LI ><LI ><P > Instead of packages, use schemas to organize your functions into groups. </P ></LI ><LI ><P > Since there are no packages, there are no package-level variables either. This is somewhat annoying. You can keep per-session state in temporary tables instead. </P ></LI ><LI ><P > Integer <TT CLASS="COMMAND" >FOR</TT > loops with <TT CLASS="LITERAL" >REVERSE</TT > work differently: <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > counts down from the second number to the first, while <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN > counts down from the first number to the second, requiring the loop bounds to be swapped when porting. This incompatibility is unfortunate but is unlikely to be changed. (See <A HREF="plpgsql-control-structures.html#PLPGSQL-INTEGER-FOR" >Section 39.6.3.5</A >.) </P ></LI ><LI ><P > <TT CLASS="COMMAND" >FOR</TT > loops over queries (other than cursors) also work differently: the target variable(s) must have been declared, whereas <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > always declares them implicitly. An advantage of this is that the variable values are still accessible after the loop exits. </P ></LI ><LI ><P > There are various notational differences for the use of cursor variables. </P ></LI ></UL ><P> </P ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="AEN58182" >39.12.1. Porting Examples</A ></H2 ><P > <A HREF="plpgsql-porting.html#PGSQL-PORTING-EX1" >Example 39-7</A > shows how to port a simple function from <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > to <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN >. </P ><DIV CLASS="EXAMPLE" ><A NAME="PGSQL-PORTING-EX1" ></A ><P ><B >Example 39-7. Porting a Simple Function from <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > to <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN ></B ></P ><P > Here is an <SPAN CLASS="PRODUCTNAME" >Oracle</SPAN > <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > function: </P><PRE CLASS="PROGRAMLISTING" >CREATE OR REPLACE FUNCTION cs_fmt_browser_version(v_name varchar, v_version varchar) RETURN varchar IS BEGIN IF v_version IS NULL THEN RETURN v_name; END IF; RETURN v_name || '/' || v_version; END; / show errors;</PRE ><P> </P ><P > Let's go through this function and see the differences compared to <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN >: <P ></P ></P><UL ><LI ><P > The <TT CLASS="LITERAL" >RETURN</TT > key word in the function prototype (not the function body) becomes <TT CLASS="LITERAL" >RETURNS</TT > in <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN >. Also, <TT CLASS="LITERAL" >IS</TT > becomes <TT CLASS="LITERAL" >AS</TT >, and you need to add a <TT CLASS="LITERAL" >LANGUAGE</TT > clause because <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN > is not the only possible function language. </P ></LI ><LI ><P > In <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN >, the function body is considered to be a string literal, so you need to use quote marks or dollar quotes around it. This substitutes for the terminating <TT CLASS="LITERAL" >/</TT > in the Oracle approach. </P ></LI ><LI ><P > The <TT CLASS="LITERAL" >show errors</TT > command does not exist in <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN >, and is not needed since errors are reported automatically. </P ></LI ></UL ><P> </P ><P > This is how this function would look when ported to <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN >: </P><PRE CLASS="PROGRAMLISTING" >CREATE OR REPLACE FUNCTION cs_fmt_browser_version(v_name varchar, v_version varchar) RETURNS varchar AS $$ BEGIN IF v_version IS NULL THEN RETURN v_name; END IF; RETURN v_name || '/' || v_version; END; $$ LANGUAGE plpgsql;</PRE ><P> </P ></DIV ><P > <A HREF="plpgsql-porting.html#PLPGSQL-PORTING-EX2" >Example 39-8</A > shows how to port a function that creates another function and how to handle the ensuing quoting problems. </P ><DIV CLASS="EXAMPLE" ><A NAME="PLPGSQL-PORTING-EX2" ></A ><P ><B >Example 39-8. Porting a Function that Creates Another Function from <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > to <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN ></B ></P ><P > The following procedure grabs rows from a <TT CLASS="COMMAND" >SELECT</TT > statement and builds a large function with the results in <TT CLASS="LITERAL" >IF</TT > statements, for the sake of efficiency. </P ><P > This is the Oracle version: </P><PRE CLASS="PROGRAMLISTING" >CREATE OR REPLACE PROCEDURE cs_update_referrer_type_proc IS CURSOR referrer_keys IS SELECT * FROM cs_referrer_keys ORDER BY try_order; func_cmd VARCHAR(4000); BEGIN func_cmd := 'CREATE OR REPLACE FUNCTION cs_find_referrer_type(v_host IN VARCHAR, v_domain IN VARCHAR, v_url IN VARCHAR) RETURN VARCHAR IS BEGIN'; FOR referrer_key IN referrer_keys LOOP func_cmd := func_cmd || ' IF v_' || referrer_key.kind || ' LIKE ''' || referrer_key.key_string || ''' THEN RETURN ''' || referrer_key.referrer_type || '''; END IF;'; END LOOP; func_cmd := func_cmd || ' RETURN NULL; END;'; EXECUTE IMMEDIATE func_cmd; END; / show errors;</PRE ><P> </P ><P > Here is how this function would end up in <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN >: </P><PRE CLASS="PROGRAMLISTING" >CREATE OR REPLACE FUNCTION cs_update_referrer_type_proc() RETURNS void AS $func$ DECLARE referrer_keys CURSOR IS SELECT * FROM cs_referrer_keys ORDER BY try_order; func_body text; func_cmd text; BEGIN func_body := 'BEGIN'; FOR referrer_key IN referrer_keys LOOP func_body := func_body || ' IF v_' || referrer_key.kind || ' LIKE ' || quote_literal(referrer_key.key_string) || ' THEN RETURN ' || quote_literal(referrer_key.referrer_type) || '; END IF;' ; END LOOP; func_body := func_body || ' RETURN NULL; END;'; func_cmd := 'CREATE OR REPLACE FUNCTION cs_find_referrer_type(v_host varchar, v_domain varchar, v_url varchar) RETURNS varchar AS ' || quote_literal(func_body) || ' LANGUAGE plpgsql;' ; EXECUTE func_cmd; END; $func$ LANGUAGE plpgsql;</PRE ><P> Notice how the body of the function is built separately and passed through <TT CLASS="LITERAL" >quote_literal</TT > to double any quote marks in it. This technique is needed because we cannot safely use dollar quoting for defining the new function: we do not know for sure what strings will be interpolated from the <TT CLASS="STRUCTFIELD" >referrer_key.key_string</TT > field. (We are assuming here that <TT CLASS="STRUCTFIELD" >referrer_key.kind</TT > can be trusted to always be <TT CLASS="LITERAL" >host</TT >, <TT CLASS="LITERAL" >domain</TT >, or <TT CLASS="LITERAL" >url</TT >, but <TT CLASS="STRUCTFIELD" >referrer_key.key_string</TT > might be anything, in particular it might contain dollar signs.) This function is actually an improvement on the Oracle original, because it will not generate broken code when <TT CLASS="STRUCTFIELD" >referrer_key.key_string</TT > or <TT CLASS="STRUCTFIELD" >referrer_key.referrer_type</TT > contain quote marks. </P ></DIV ><P > <A HREF="plpgsql-porting.html#PLPGSQL-PORTING-EX3" >Example 39-9</A > shows how to port a function with <TT CLASS="LITERAL" >OUT</TT > parameters and string manipulation. <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN > does not have a built-in <CODE CLASS="FUNCTION" >instr</CODE > function, but you can create one using a combination of other functions. In <A HREF="plpgsql-porting.html#PLPGSQL-PORTING-APPENDIX" >Section 39.12.3</A > there is a <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN > implementation of <CODE CLASS="FUNCTION" >instr</CODE > that you can use to make your porting easier. </P ><DIV CLASS="EXAMPLE" ><A NAME="PLPGSQL-PORTING-EX3" ></A ><P ><B >Example 39-9. Porting a Procedure With String Manipulation and <TT CLASS="LITERAL" >OUT</TT > Parameters from <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > to <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN ></B ></P ><P > The following <SPAN CLASS="PRODUCTNAME" >Oracle</SPAN > PL/SQL procedure is used to parse a URL and return several elements (host, path, and query). </P ><P > This is the Oracle version: </P><PRE CLASS="PROGRAMLISTING" >CREATE OR REPLACE PROCEDURE cs_parse_url( v_url IN VARCHAR, v_host OUT VARCHAR, -- This will be passed back v_path OUT VARCHAR, -- This one too v_query OUT VARCHAR) -- And this one IS a_pos1 INTEGER; a_pos2 INTEGER; BEGIN v_host := NULL; v_path := NULL; v_query := NULL; a_pos1 := instr(v_url, '//'); IF a_pos1 = 0 THEN RETURN; END IF; a_pos2 := instr(v_url, '/', a_pos1 + 2); IF a_pos2 = 0 THEN v_host := substr(v_url, a_pos1 + 2); v_path := '/'; RETURN; END IF; v_host := substr(v_url, a_pos1 + 2, a_pos2 - a_pos1 - 2); a_pos1 := instr(v_url, '?', a_pos2 + 1); IF a_pos1 = 0 THEN v_path := substr(v_url, a_pos2); RETURN; END IF; v_path := substr(v_url, a_pos2, a_pos1 - a_pos2); v_query := substr(v_url, a_pos1 + 1); END; / show errors;</PRE ><P> </P ><P > Here is a possible translation into <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN >: </P><PRE CLASS="PROGRAMLISTING" >CREATE OR REPLACE FUNCTION cs_parse_url( v_url IN VARCHAR, v_host OUT VARCHAR, -- This will be passed back v_path OUT VARCHAR, -- This one too v_query OUT VARCHAR) -- And this one AS $$ DECLARE a_pos1 INTEGER; a_pos2 INTEGER; BEGIN v_host := NULL; v_path := NULL; v_query := NULL; a_pos1 := instr(v_url, '//'); IF a_pos1 = 0 THEN RETURN; END IF; a_pos2 := instr(v_url, '/', a_pos1 + 2); IF a_pos2 = 0 THEN v_host := substr(v_url, a_pos1 + 2); v_path := '/'; RETURN; END IF; v_host := substr(v_url, a_pos1 + 2, a_pos2 - a_pos1 - 2); a_pos1 := instr(v_url, '?', a_pos2 + 1); IF a_pos1 = 0 THEN v_path := substr(v_url, a_pos2); RETURN; END IF; v_path := substr(v_url, a_pos2, a_pos1 - a_pos2); v_query := substr(v_url, a_pos1 + 1); END; $$ LANGUAGE plpgsql;</PRE ><P> This function could be used like this: </P><PRE CLASS="PROGRAMLISTING" >SELECT * FROM cs_parse_url('http://foobar.com/query.cgi?baz');</PRE ><P> </P ></DIV ><P > <A HREF="plpgsql-porting.html#PLPGSQL-PORTING-EX4" >Example 39-10</A > shows how to port a procedure that uses numerous features that are specific to Oracle. </P ><DIV CLASS="EXAMPLE" ><A NAME="PLPGSQL-PORTING-EX4" ></A ><P ><B >Example 39-10. Porting a Procedure from <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > to <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN ></B ></P ><P > The Oracle version: </P><PRE CLASS="PROGRAMLISTING" >CREATE OR REPLACE PROCEDURE cs_create_job(v_job_id IN INTEGER) IS a_running_job_count INTEGER; PRAGMA AUTONOMOUS_TRANSACTION;<A NAME="CO.PLPGSQL-PORTING-PRAGMA" ><B >(1)</B ></A > BEGIN LOCK TABLE cs_jobs IN EXCLUSIVE MODE;<A NAME="CO.PLPGSQL-PORTING-LOCKTABLE" ><B >(2)</B ></A > SELECT count(*) INTO a_running_job_count FROM cs_jobs WHERE end_stamp IS NULL; IF a_running_job_count > 0 THEN COMMIT; -- free lock<A NAME="CO.PLPGSQL-PORTING-COMMIT" ><B >(3)</B ></A > raise_application_error(-20000, 'Unable to create a new job: a job is currently running.'); END IF; DELETE FROM cs_active_job; INSERT INTO cs_active_job(job_id) VALUES (v_job_id); BEGIN INSERT INTO cs_jobs (job_id, start_stamp) VALUES (v_job_id, sysdate); EXCEPTION WHEN dup_val_on_index THEN NULL; -- don't worry if it already exists END; COMMIT; END; / show errors</PRE ><P> </P ><P > Procedures like this can easily be converted into <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN > functions returning <TT CLASS="TYPE" >void</TT >. This procedure in particular is interesting because it can teach us some things: <DIV CLASS="CALLOUTLIST" ><DL COMPACT="COMPACT" ><DT ><A HREF="plpgsql-porting.html#CO.PLPGSQL-PORTING-PRAGMA" ><B >(1)</B ></A ></DT ><DD > There is no <TT CLASS="LITERAL" >PRAGMA</TT > statement in <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN >. </DD ><DT ><A HREF="plpgsql-porting.html#CO.PLPGSQL-PORTING-LOCKTABLE" ><B >(2)</B ></A ></DT ><DD > If you do a <TT CLASS="COMMAND" >LOCK TABLE</TT > in <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN >, the lock will not be released until the calling transaction is finished. </DD ><DT ><A HREF="plpgsql-porting.html#CO.PLPGSQL-PORTING-COMMIT" ><B >(3)</B ></A ></DT ><DD > You cannot issue <TT CLASS="COMMAND" >COMMIT</TT > in a <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN > function. The function is running within some outer transaction and so <TT CLASS="COMMAND" >COMMIT</TT > would imply terminating the function's execution. However, in this particular case it is not necessary anyway, because the lock obtained by the <TT CLASS="COMMAND" >LOCK TABLE</TT > will be released when we raise an error. </DD ></DL ></DIV > </P ><P > This is how we could port this procedure to <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN >: </P><PRE CLASS="PROGRAMLISTING" >CREATE OR REPLACE FUNCTION cs_create_job(v_job_id integer) RETURNS void AS $$ DECLARE a_running_job_count integer; BEGIN LOCK TABLE cs_jobs IN EXCLUSIVE MODE; SELECT count(*) INTO a_running_job_count FROM cs_jobs WHERE end_stamp IS NULL; IF a_running_job_count > 0 THEN RAISE EXCEPTION 'Unable to create a new job: a job is currently running';<A NAME="CO.PLPGSQL-PORTING-RAISE" ><B >(1)</B ></A > END IF; DELETE FROM cs_active_job; INSERT INTO cs_active_job(job_id) VALUES (v_job_id); BEGIN INSERT INTO cs_jobs (job_id, start_stamp) VALUES (v_job_id, now()); EXCEPTION WHEN unique_violation THEN <A NAME="CO.PLPGSQL-PORTING-EXCEPTION" ><B >(2)</B ></A > -- don't worry if it already exists END; END; $$ LANGUAGE plpgsql;</PRE ><P> <DIV CLASS="CALLOUTLIST" ><DL COMPACT="COMPACT" ><DT ><A HREF="plpgsql-porting.html#CO.PLPGSQL-PORTING-RAISE" ><B >(1)</B ></A ></DT ><DD > The syntax of <TT CLASS="LITERAL" >RAISE</TT > is considerably different from Oracle's statement, although the basic case <TT CLASS="LITERAL" >RAISE</TT > <TT CLASS="REPLACEABLE" ><I >exception_name</I ></TT > works similarly. </DD ><DT ><A HREF="plpgsql-porting.html#CO.PLPGSQL-PORTING-EXCEPTION" ><B >(2)</B ></A ></DT ><DD > The exception names supported by <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN > are different from Oracle's. The set of built-in exception names is much larger (see <A HREF="errcodes-appendix.html" >Appendix A</A >). There is not currently a way to declare user-defined exception names, although you can throw user-chosen SQLSTATE values instead. </DD ></DL ></DIV > The main functional difference between this procedure and the Oracle equivalent is that the exclusive lock on the <TT CLASS="LITERAL" >cs_jobs</TT > table will be held until the calling transaction completes. Also, if the caller later aborts (for example due to an error), the effects of this procedure will be rolled back. </P ></DIV ></DIV ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="PLPGSQL-PORTING-OTHER" >39.12.2. Other Things to Watch For</A ></H2 ><P > This section explains a few other things to watch for when porting Oracle <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > functions to <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN >. </P ><DIV CLASS="SECT3" ><H3 CLASS="SECT3" ><A NAME="PLPGSQL-PORTING-EXCEPTIONS" >39.12.2.1. Implicit Rollback after Exceptions</A ></H3 ><P > In <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN >, when an exception is caught by an <TT CLASS="LITERAL" >EXCEPTION</TT > clause, all database changes since the block's <TT CLASS="LITERAL" >BEGIN</TT > are automatically rolled back. That is, the behavior is equivalent to what you'd get in Oracle with: </P><PRE CLASS="PROGRAMLISTING" >BEGIN SAVEPOINT s1; ... code here ... EXCEPTION WHEN ... THEN ROLLBACK TO s1; ... code here ... WHEN ... THEN ROLLBACK TO s1; ... code here ... END;</PRE ><P> If you are translating an Oracle procedure that uses <TT CLASS="COMMAND" >SAVEPOINT</TT > and <TT CLASS="COMMAND" >ROLLBACK TO</TT > in this style, your task is easy: just omit the <TT CLASS="COMMAND" >SAVEPOINT</TT > and <TT CLASS="COMMAND" >ROLLBACK TO</TT >. If you have a procedure that uses <TT CLASS="COMMAND" >SAVEPOINT</TT > and <TT CLASS="COMMAND" >ROLLBACK TO</TT > in a different way then some actual thought will be required. </P ></DIV ><DIV CLASS="SECT3" ><H3 CLASS="SECT3" ><A NAME="AEN58328" >39.12.2.2. <TT CLASS="COMMAND" >EXECUTE</TT ></A ></H3 ><P > The <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN > version of <TT CLASS="COMMAND" >EXECUTE</TT > works similarly to the <SPAN CLASS="APPLICATION" >PL/SQL</SPAN > version, but you have to remember to use <CODE CLASS="FUNCTION" >quote_literal</CODE > and <CODE CLASS="FUNCTION" >quote_ident</CODE > as described in <A HREF="plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN" >Section 39.5.4</A >. Constructs of the type <TT CLASS="LITERAL" >EXECUTE 'SELECT * FROM $1';</TT > will not work reliably unless you use these functions. </P ></DIV ><DIV CLASS="SECT3" ><H3 CLASS="SECT3" ><A NAME="PLPGSQL-PORTING-OPTIMIZATION" >39.12.2.3. Optimizing <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN > Functions</A ></H3 ><P > <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN > gives you two function creation modifiers to optimize execution: <SPAN CLASS="QUOTE" >"volatility"</SPAN > (whether the function always returns the same result when given the same arguments) and <SPAN CLASS="QUOTE" >"strictness"</SPAN > (whether the function returns null if any argument is null). Consult the <A HREF="sql-createfunction.html" >CREATE FUNCTION</A > reference page for details. </P ><P > When making use of these optimization attributes, your <TT CLASS="COMMAND" >CREATE FUNCTION</TT > statement might look something like this: </P><PRE CLASS="PROGRAMLISTING" >CREATE FUNCTION foo(...) RETURNS integer AS $$ ... $$ LANGUAGE plpgsql STRICT IMMUTABLE;</PRE ><P> </P ></DIV ></DIV ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="PLPGSQL-PORTING-APPENDIX" >39.12.3. Appendix</A ></H2 ><P > This section contains the code for a set of Oracle-compatible <CODE CLASS="FUNCTION" >instr</CODE > functions that you can use to simplify your porting efforts. </P ><PRE CLASS="PROGRAMLISTING" >-- -- instr functions that mimic Oracle's counterpart -- Syntax: instr(string1, string2, [n], [m]) where [] denotes optional parameters. -- -- Searches string1 beginning at the nth character for the mth occurrence -- of string2. If n is negative, search backwards. If m is not passed, -- assume 1 (search starts at first character). -- CREATE FUNCTION instr(varchar, varchar) RETURNS integer AS $$ DECLARE pos integer; BEGIN pos:= instr($1, $2, 1); RETURN pos; END; $$ LANGUAGE plpgsql STRICT IMMUTABLE; CREATE FUNCTION instr(string varchar, string_to_search varchar, beg_index integer) RETURNS integer AS $$ DECLARE pos integer NOT NULL DEFAULT 0; temp_str varchar; beg integer; length integer; ss_length integer; BEGIN IF beg_index > 0 THEN temp_str := substring(string FROM beg_index); pos := position(string_to_search IN temp_str); IF pos = 0 THEN RETURN 0; ELSE RETURN pos + beg_index - 1; END IF; ELSE ss_length := char_length(string_to_search); length := char_length(string); beg := length + beg_index - ss_length + 2; WHILE beg > 0 LOOP temp_str := substring(string FROM beg FOR ss_length); pos := position(string_to_search IN temp_str); IF pos > 0 THEN RETURN beg; END IF; beg := beg - 1; END LOOP; RETURN 0; END IF; END; $$ LANGUAGE plpgsql STRICT IMMUTABLE; CREATE FUNCTION instr(string varchar, string_to_search varchar, beg_index integer, occur_index integer) RETURNS integer AS $$ DECLARE pos integer NOT NULL DEFAULT 0; occur_number integer NOT NULL DEFAULT 0; temp_str varchar; beg integer; i integer; length integer; ss_length integer; BEGIN IF beg_index > 0 THEN beg := beg_index; temp_str := substring(string FROM beg_index); FOR i IN 1..occur_index LOOP pos := position(string_to_search IN temp_str); IF i = 1 THEN beg := beg + pos - 1; ELSE beg := beg + pos; END IF; temp_str := substring(string FROM beg + 1); END LOOP; IF pos = 0 THEN RETURN 0; ELSE RETURN beg; END IF; ELSE ss_length := char_length(string_to_search); length := char_length(string); beg := length + beg_index - ss_length + 2; WHILE beg > 0 LOOP temp_str := substring(string FROM beg FOR ss_length); pos := position(string_to_search IN temp_str); IF pos > 0 THEN occur_number := occur_number + 1; IF occur_number = occur_index THEN RETURN beg; END IF; END IF; beg := beg - 1; END LOOP; RETURN 0; END IF; END; $$ LANGUAGE plpgsql STRICT IMMUTABLE;</PRE ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="plpgsql-development-tips.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="pltcl.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Tips for Developing in <SPAN CLASS="APPLICATION" >PL/pgSQL</SPAN ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="plpgsql.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >PL/Tcl - Tcl Procedural Language</TD ></TR ></TABLE ></DIV ></BODY ></HTML >
Upload File
Create Folder