1996-12-10 02:03:43 -05:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
*
|
1999-02-13 18:22:53 -05:00
|
|
|
* postgres_ext.h
|
1996-12-10 02:03:43 -05:00
|
|
|
*
|
2001-02-09 21:31:31 -05:00
|
|
|
* This file contains declarations of things that are visible everywhere
|
|
|
|
|
* in PostgreSQL *and* are visible to clients of frontend interface libraries.
|
|
|
|
|
* For example, the Oid type is part of the API of libpq and other libraries.
|
1996-12-10 02:03:43 -05:00
|
|
|
*
|
|
|
|
|
* Declarations which are specific to a particular interface should
|
|
|
|
|
* go in the header file for that interface (such as libpq-fe.h). This
|
|
|
|
|
* file is only for fundamental Postgres declarations.
|
|
|
|
|
*
|
|
|
|
|
* User-written C functions don't count as "external to Postgres."
|
|
|
|
|
* Those function much as local modifications to the backend itself, and
|
|
|
|
|
* use header files that are otherwise internal to Postgres to interface
|
|
|
|
|
* with the backend.
|
1997-09-07 01:04:48 -04:00
|
|
|
*
|
2010-09-20 16:08:53 -04:00
|
|
|
* src/include/postgres_ext.h
|
1996-12-10 02:03:43 -05:00
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
2025-01-15 12:57:53 -05:00
|
|
|
/* IWYU pragma: always_keep */
|
1996-12-10 02:03:43 -05:00
|
|
|
|
|
|
|
|
#ifndef POSTGRES_EXT_H
|
|
|
|
|
#define POSTGRES_EXT_H
|
|
|
|
|
|
Move pg_int64 back to postgres_ext.h
Fix for commit 3c86223c998. That commit moved the typedef of pg_int64
from postgres_ext.h to libpq-fe.h, because the only remaining place
where it might be used is libpq users, and since the type is obsolete,
the intent was to limit its scope.
The problem is that if someone builds an extension against an
older (pre-PG18) server version and a new (PG18) libpq, they might get
two typedefs, depending on include file order. This is not allowed
under C99, so they might get warnings or errors, depending on the
compiler and options. The underlying types might also be
different (e.g., long int vs. long long int), which would also lead to
errors. This scenario is plausible when using the standard Debian
packaging, which provides only the newest libpq but per-major-version
server packages.
The fix is to undo that part of commit 3c86223c998. That way, the
typedef is in the same header file across versions. At least, this is
the safest fix doable before PostgreSQL 18 releases.
Reviewed-by: Thomas Munro <thomas.munro@gmail.com>
Discussion: https://www.postgresql.org/message-id/25144219-5142-4589-89f8-4e76948b32db%40eisentraut.org
2025-09-16 02:59:12 -04:00
|
|
|
#include <stdint.h>
|
|
|
|
|
|
2000-12-22 16:36:09 -05:00
|
|
|
/*
|
|
|
|
|
* Object ID is a fundamental type in Postgres.
|
|
|
|
|
*/
|
1996-12-10 02:03:43 -05:00
|
|
|
typedef unsigned int Oid;
|
|
|
|
|
|
2003-03-18 12:21:07 -05:00
|
|
|
#ifdef __cplusplus
|
|
|
|
|
#define InvalidOid (Oid(0))
|
|
|
|
|
#else
|
2001-02-09 21:31:31 -05:00
|
|
|
#define InvalidOid ((Oid) 0)
|
2003-03-18 12:21:07 -05:00
|
|
|
#endif
|
2001-02-09 21:31:31 -05:00
|
|
|
|
2000-12-22 16:36:09 -05:00
|
|
|
#define OID_MAX UINT_MAX
|
|
|
|
|
/* you will need to include <limits.h> to use the above #define */
|
|
|
|
|
|
2017-03-01 11:55:28 -05:00
|
|
|
#define atooid(x) ((Oid) strtoul((x), NULL, 10))
|
|
|
|
|
/* the above needs <stdlib.h> */
|
|
|
|
|
|
|
|
|
|
|
Move pg_int64 back to postgres_ext.h
Fix for commit 3c86223c998. That commit moved the typedef of pg_int64
from postgres_ext.h to libpq-fe.h, because the only remaining place
where it might be used is libpq users, and since the type is obsolete,
the intent was to limit its scope.
The problem is that if someone builds an extension against an
older (pre-PG18) server version and a new (PG18) libpq, they might get
two typedefs, depending on include file order. This is not allowed
under C99, so they might get warnings or errors, depending on the
compiler and options. The underlying types might also be
different (e.g., long int vs. long long int), which would also lead to
errors. This scenario is plausible when using the standard Debian
packaging, which provides only the newest libpq but per-major-version
server packages.
The fix is to undo that part of commit 3c86223c998. That way, the
typedef is in the same header file across versions. At least, this is
the safest fix doable before PostgreSQL 18 releases.
Reviewed-by: Thomas Munro <thomas.munro@gmail.com>
Discussion: https://www.postgresql.org/message-id/25144219-5142-4589-89f8-4e76948b32db%40eisentraut.org
2025-09-16 02:59:12 -04:00
|
|
|
/* deprecated name for int64_t, formerly used in client API declarations */
|
|
|
|
|
typedef int64_t pg_int64;
|
|
|
|
|
|
2003-08-26 20:33:34 -04:00
|
|
|
/*
|
|
|
|
|
* Identifiers of error message fields. Kept here to keep common
|
|
|
|
|
* between frontend and backend, and also to export them to libpq
|
|
|
|
|
* applications.
|
|
|
|
|
*/
|
|
|
|
|
#define PG_DIAG_SEVERITY 'S'
|
2016-08-26 16:20:17 -04:00
|
|
|
#define PG_DIAG_SEVERITY_NONLOCALIZED 'V'
|
2003-08-26 20:33:34 -04:00
|
|
|
#define PG_DIAG_SQLSTATE 'C'
|
|
|
|
|
#define PG_DIAG_MESSAGE_PRIMARY 'M'
|
|
|
|
|
#define PG_DIAG_MESSAGE_DETAIL 'D'
|
|
|
|
|
#define PG_DIAG_MESSAGE_HINT 'H'
|
|
|
|
|
#define PG_DIAG_STATEMENT_POSITION 'P'
|
2004-03-21 17:29:11 -05:00
|
|
|
#define PG_DIAG_INTERNAL_POSITION 'p'
|
|
|
|
|
#define PG_DIAG_INTERNAL_QUERY 'q'
|
2003-08-26 20:33:34 -04:00
|
|
|
#define PG_DIAG_CONTEXT 'W'
|
Provide database object names as separate fields in error messages.
This patch addresses the problem that applications currently have to
extract object names from possibly-localized textual error messages,
if they want to know for example which index caused a UNIQUE_VIOLATION
failure. It adds new error message fields to the wire protocol, which
can carry the name of a table, table column, data type, or constraint
associated with the error. (Since the protocol spec has always instructed
clients to ignore unrecognized field types, this should not create any
compatibility problem.)
Support for providing these new fields has been added to just a limited set
of error reports (mainly, those in the "integrity constraint violation"
SQLSTATE class), but we will doubtless add them to more calls in future.
Pavel Stehule, reviewed and extensively revised by Peter Geoghegan, with
additional hacking by Tom Lane.
2013-01-29 17:06:26 -05:00
|
|
|
#define PG_DIAG_SCHEMA_NAME 's'
|
|
|
|
|
#define PG_DIAG_TABLE_NAME 't'
|
|
|
|
|
#define PG_DIAG_COLUMN_NAME 'c'
|
|
|
|
|
#define PG_DIAG_DATATYPE_NAME 'd'
|
|
|
|
|
#define PG_DIAG_CONSTRAINT_NAME 'n'
|
2003-08-26 20:33:34 -04:00
|
|
|
#define PG_DIAG_SOURCE_FILE 'F'
|
|
|
|
|
#define PG_DIAG_SOURCE_LINE 'L'
|
|
|
|
|
#define PG_DIAG_SOURCE_FUNCTION 'R'
|
|
|
|
|
|
2012-10-07 21:52:07 -04:00
|
|
|
#endif /* POSTGRES_EXT_H */
|