From 2b5dd3a5eeaa4f5bc47d4136715c5e13babb6149 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 30 Sep 2024 10:22:19 +0200 Subject: [PATCH] add postgres --- .../applications/development/Postgres.md | 282 +++++++++++++++++- 1 file changed, 278 insertions(+), 4 deletions(-) diff --git a/technology/applications/development/Postgres.md b/technology/applications/development/Postgres.md index 9ccd4ee..5c04dbe 100644 --- a/technology/applications/development/Postgres.md +++ b/technology/applications/development/Postgres.md @@ -5,8 +5,282 @@ repo: https://git.postgresql.org/gitweb/?p=postgresql.git --- # Postgres +PostgreSQL is an advanced, open-source, object-relational database management system. It is renowned for its scalability, reliability, and compliance with the SQL standard. PostgreSQL supports both SQL (relational) and JSON (non-relational) querying, making it highly versatile. -#wip -Postgres database -timescaledb -https://github.com/pgvector/pgvector \ No newline at end of file +## Extensions +PostgreSQL can be extended via extensions: +- [TimescaleDB](./TimescaleDB.md) - Time-series data +- [pgVector](./pgvector.md) - Vector database functions +- [PostGIS](./PostGIS.md) - Spatial data + +## psql +**psql** is a terminal-based front end to PostgreSQL. It allows users to interact with PostgreSQL databases by executing SQL queries, managing database objects, and performing administrative tasks. + +To start psql, open your terminal or command prompt and type: + +```bash +psql +``` + +### Connecting to a Database +You can specify the database name, user, host, and port when launching psql: + +```bash +psql -d database_name -U username -h hostname -p port +``` + +Alternatively, you can use environment variables: + +```bash +export PGDATABASE=mydb +export PGUSER=myuser +export PGPASSWORD=mypassword +export PGHOST=localhost +export PGPORT=5432 + +psql +``` + +### Listing Databases and Tables + +- **List Databases:** + + ```sql + \l + ``` + +- **List Tables in the Current Database:** + + ```sql + \dt + ``` + +- **List All Schemas:** + + ```sql + \dn + ``` + +### Creating and Dropping Databases/Tables + +- **Create a Database:** + + ```sql + CREATE DATABASE mydb; + ``` + +- **Drop a Database:** + + ```sql + DROP DATABASE mydb; + ``` + +- **Create a Table:** + + ```sql + CREATE TABLE users ( + id SERIAL PRIMARY KEY, + username VARCHAR(50) NOT NULL, + email VARCHAR(100) NOT NULL + ); + ``` + +- **Drop a Table:** + + ```sql + DROP TABLE users; + ``` + +### Running SQL Queries +Execute standard SQL commands to interact with your data. + +**Example: Inserting Data** + +```sql +INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com'); +``` + +**Example: Querying Data** + +```sql +SELECT * FROM users; +``` + +**Example: Updating Data** + +```sql +UPDATE users SET email = 'john.doe@example.com' WHERE username = 'john_doe'; +``` + +**Example: Deleting Data** + +```sql +DELETE FROM users WHERE username = 'john_doe'; +``` + +## Meta-Commands +psql provides a set of meta-commands (prefixed with `\`) that facilitate various tasks. + +### Common Meta-Commands + +- **Help on Meta-Commands:** + + ```sql + \? + ``` + +- **Help on SQL Commands:** + + ```sql + \h + ``` + +- **Describe a Table:** + + ```sql + \d table_name + ``` + +- **List All Tables, Views, and Sequences:** + + ```sql + \dt + ``` + +- **List All Indexes:** + + ```sql + \di + ``` + +- **Exit psql:** + + ```sql + \q + ``` + +## Data Types +### 1. **Numeric Types** + - **Small Integer Types** + - `SMALLINT` (2 bytes): Range from -32,768 to +32,767 + - **Integer Types** + - `INTEGER` or `INT` (4 bytes): Range from -2,147,483,648 to +2,147,483,647 + - **Big Integer Types** + - `BIGINT` (8 bytes): Range from -9,223,372,036,854,775,808 to +9,223,372,036,854,775,807 + - **Decimal/Exact Types** + - `DECIMAL` or `NUMERIC` (variable size): User-defined precision and scale + - **Floating-Point Types** + - `REAL` (4 bytes): Single precision floating-point number + - `DOUBLE PRECISION` (8 bytes): Double precision floating-point number + - **Serial Types (Auto-Incrementing)** + - `SERIAL` (4 bytes): Auto-incrementing integer (small range) + - `BIGSERIAL` (8 bytes): Auto-incrementing integer (large range) + - `SMALLSERIAL` (2 bytes): Auto-incrementing integer (smaller range) + +### 2. **Monetary Type** + - `MONEY`: Stores currency amounts with a fixed fractional precision + +### 3. **Character Types** + - **Fixed-Length Strings** + - `CHAR(n)` or `CHARACTER(n)`: Fixed length (padded with spaces) + - **Variable-Length Strings** + - `VARCHAR(n)` or `CHARACTER VARYING(n)`: Variable length with a limit + - **Text** + - `TEXT`: Variable length with no specific limit + +### 4. **Binary Data Types** + - **Binary Large Object** + - `BYTEA`: Stores binary strings (byte arrays) + +### 5. **Date/Time Types** + - **Date and Time** + - `DATE`: Calendar date (year, month, day) + - `TIME` (no time zone): Time of day (without time zone) + - `TIMETZ` (with time zone): Time of day (with time zone) + - `TIMESTAMP` (no time zone): Date and time without time zone + - `TIMESTAMPTZ` (with time zone): Date and time with time zone + - **Intervals** + - `INTERVAL`: Time span (e.g., days, months, hours) + +### 6. **Boolean Type** + - `BOOLEAN`: Stores `TRUE`, `FALSE`, or `NULL` + +### 7. **UUID Type** + - `UUID`: Stores Universally Unique Identifiers (128-bit values) + +### 8. **Enumerated Types** + - `ENUM`: User-defined enumerated type (a static set of values) + +### 9. **Geometric Types** + - `POINT`: Stores a geometric point (x, y) + - `LINE`: Infinite line + - `LSEG`: Line segment + - `BOX`: Rectangular box + - `PATH`: Geometric path (multiple points) + - `POLYGON`: Closed geometric figure + - `CIRCLE`: Circle + +### 10. **Network Address Types** + - `CIDR`: IPv4 or IPv6 network block + - `INET`: IPv4 or IPv6 address + - `MACADDR`: MAC address + - `MACADDR8`: MAC address (EUI-64 format) + +### 11. **Bit String Types** + - **Fixed-Length Bit Strings** + - `BIT(n)`: Fixed-length bit string + - **Variable-Length Bit Strings** + - `BIT VARYING(n)`: Variable-length bit string + +### 12. **Text Search Types** + - `TSVECTOR`: Text search document + - `TSQUERY`: Text search query + +### 13. **JSON Types** + - `JSON`: Textual JSON data + - `JSONB`: Binary JSON data (more efficient for indexing) + +### 14. **Array Types** + - `ARRAY`: Allows any data type to be stored as an array (e.g., `INTEGER[]`, `TEXT[]`) + +### 15. **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` + +### 16. **Composite Types** + - User-defined types that consist of multiple fields of various types + +### 17. **Object Identifier Types (OID)** + - `OID`: Object identifier (used internally by PostgreSQL) + - `REGCLASS`, `REGPROC`, `REGTYPE`: Special types for referencing classes, procedures, and types by OID or name + +### 18. **Pseudo-Types** + - `ANY`: Accepts any data type + - `ANYARRAY`: Accepts any array data type + - `ANYELEMENT`: Represents any type of element + - `ANYENUM`: Accepts any `ENUM` type + - `ANYNONARRAY`: Any non-array type + - `VOID`: No data (used with functions that return no value) + - `TRIGGER`: Used in triggers + - `LANGUAGE_HANDLER`: Used internally for language support + +## Docker-Compose +```yml +services: + postgres: + image: postgres:17 + container_name: postgres + environment: + POSTGRES_USER: myuser + POSTGRES_PASSWORD: mypassword + POSTGRES_DB: mydb + ports: + - "5432:5432" + volumes: + - ./postgres:/var/lib/postgresql/data + restart: always +```