{"id":15187457,"url":"https://github.com/amadr-95/sql-advanced","last_synced_at":"2026-02-03T19:02:53.024Z","repository":{"id":236104290,"uuid":"791919258","full_name":"amadr-95/sql-advanced","owner":"amadr-95","description":null,"archived":false,"fork":false,"pushed_at":"2024-04-25T16:17:49.000Z","size":228,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-24T16:51:00.231Z","etag":null,"topics":["database-indexes","database-management","database-transactions","plpgsql","postgresql","sql"],"latest_commit_sha":null,"homepage":"","language":"PLpgSQL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/amadr-95.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-04-25T16:13:41.000Z","updated_at":"2024-04-25T16:21:02.000Z","dependencies_parsed_at":"2024-04-25T17:43:49.495Z","dependency_job_id":null,"html_url":"https://github.com/amadr-95/sql-advanced","commit_stats":null,"previous_names":["amadr-95/sql-advanced"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/amadr-95/sql-advanced","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amadr-95%2Fsql-advanced","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amadr-95%2Fsql-advanced/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amadr-95%2Fsql-advanced/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amadr-95%2Fsql-advanced/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amadr-95","download_url":"https://codeload.github.com/amadr-95/sql-advanced/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amadr-95%2Fsql-advanced/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29054048,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T15:43:47.601Z","status":"ssl_error","status_checked_at":"2026-02-03T15:43:46.709Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database-indexes","database-management","database-transactions","plpgsql","postgresql","sql"],"created_at":"2024-09-27T18:22:53.035Z","updated_at":"2026-02-03T19:02:53.006Z","avatar_url":"https://github.com/amadr-95.png","language":"PLpgSQL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [ADVANCED DATABASES](https://www.amigoscode.com/courses/advanced-databases)\n\n## JOINS\n\n### - (INNER) JOIN\n\n```\nSelect records that have matching values in both tables\n```\n![inner-join](https://github.com/amadr-95/sql-advanced/assets/122611230/50f2cfe0-f0b9-41f2-a0d0-c25de95e80da)\n\n### - (OUTER) LEFT JOIN\n\n```\nSelect records from the left table with matching right table records\n```\n![left-join](https://github.com/amadr-95/sql-advanced/assets/122611230/19f65391-977d-4484-ae9a-50ee14561201)\n\n### - (OUTER) RIGHT JOIN\n\n```\nSelect records from the right table with matching left table records\n```\n![right-join](https://github.com/amadr-95/sql-advanced/assets/122611230/1303d790-3b38-432d-bf57-6fc0bf115dc7)\n\n### - FULL JOIN\n\n```\nSelect all records that match either left or right table records\n```\n![full-join](https://github.com/amadr-95/sql-advanced/assets/122611230/8dc8c372-fa90-45bc-9ace-0f2647531f39)\n\n## TRANSACTIONS (A.C.I.D. PRINCIPLES)\n\n```\n1. ATOMICITY:\n   - Atomicity ensures that a transaction is performed completely or not performed at all.\n   - If any part of the transaction fails, the entire transaction is rolled back to its previous state.\n   - It guarantees that data remains consistent even in cases of failure.\n\n2. CONSISTENCY:\n   - Consistency ensures that only changes to data that respect all system integrity constraints are made.\n   - Before and after a transaction, data must be in a valid state.\n\n3. ISOLATION:\n   - Isolation principle ensures that the effects of a transaction are not visible to other transactions until it is completely finished.\n   - Transactions are executed in isolation from one another, preventing operations in one transaction from interfering with concurrent transactions.\n\n4. DURABILITY:\n   - Durability guarantees that once a transaction is successfully completed and committed, the changes will persist even in the event of a system failure.\n   - Data modified by the transaction is permanently saved and will not be lost, even in system failure situations.\n\n```\n### BEGIN, COMMIT, ROLLBACK\n- **Begin**: starts a transaction\n- **Commit**: commits a transaction\n- **Rollback**: reverts the data to its previous state if anything goes wrong\n\n## INDEXES\nUsing indexes may **increases the performance** when retriving many rows.\n\n- **View indexes**\n```sql\nSELECT tablename, indexname, indexdef FROM pg_indexes WHERE schemaname = 'public';\n```\n\n- **Create indexes**\n```sql\nCREATE INDEX table_colum_name_idx ON table(column_name);\n```\n\n- **Delete indexes**\n```sql\nDROP INDEX index_name;\n```\n\n### Multi-column indexes\nCombining two or more columns.\n\n```sql\nCREATE INDEX table_column1_column2_idx ON table(column1, column2);\n```\n\n```\n... WHERE column1 = '' AND column2 = '' ✅\n... WHERE column1 = '' ✅\n... WHERE column2 = '' ❌ (index does not have any effect)\n```\n### Unique indexes\n```sql\nCREATE UNIQUE INDEX table_column_name_unique_idx\nON table(column_name);\n```\n\n### Partial indexes\n```sql\nCREATE UNIQUE INDEX table_column_name_partial_idx\nON table(column_name)\nWHERE column_name = condition (boolean for example)\n```\n\n## FUNCTIONS\n\n- Create functions\n```sql\nCREATE OR REPLACE FUNCTION function_name(param1 TYPE, param2 TYPE...)\n    RETURNS TYPE\n    LANGUAGE plpgsql\nAS\n$$\nDECLARE\n--variable declaration\n    variable_name TYPE;\nBEGIN\n--logic\n    RETURN variable_name;\nEND;\n$$;\n```\n- Use functions\n```sql\nSELECT function_name(param1, param2, ...);\n```\n\n- View functions in terminal\n```bash\n\\df\n```\n\n- Delete functions\n```sql\nDROP FUNCTION function_name;\n```\n\n## ROLES\n- View roles in terminal\n```bash\n\\du\n```\n\n- Create role (rol = user)\n```sql\nCREATE ROLE/USER name; --basic\n```\n\n```sql\nCREATE ROLE/USER name (WITH) LOGIN PASSWORD 'password';\n```\n- Modify role\n```sql\nALTER ROLE rol_name [options]\n```\nOptions:\n\n    - SUPERUSER | NOSUPERUSER\n    - CREATEDB | NOCREATEDB\n    - CREATEROLE | NOCREATEROLE\n    - INHERIT | NOINHERIT\n    - LOGIN | NOLOGIN\n    - REPLICATION | NOREPLICATION\n    - BYPASSRLS | NOBYPASSRLS\n    - CONNECTION LIMIT limit\n    - PASSWORD 'password' | PASSWORD NULL\n    - VALID UNTIL 'timestamp'\n\n- Delete role\n```sql\nDROP ROLE name;\n```\n\n### Privileges\n#### Grant\n```sql\nGRANT privilege_list | ALL \nON  table_name | ALL TABLES IN SCHEMA schema_name\nTO  role_name;\n```\n\nPrivileges:\n\n    - SELECT\n    - INSERT\n    - UPDATE\n    - DELETE\n    - TRUNCATE\n    - ...\n\n#### Revoke\n```sql\nREVOKE privilege_list | ALL\nON table_name | ALL TABLES IN SCHEMA schema_name\nFROM role_name;\n```\n\n## SCHEMAS\n\n- View schemas \n```bash\n\\dn\n```\n```sql\nSELECT current_schema(); --public by default\n```\n- Create schema\n```sql\nCREATE SCHEMA schema_name;\n```\n\n- Create tables in custom schemas\n```sql\nCREATE TABLE schema_name.table_name;\n```\n### Search path\n```sql\nSHOW search_path;\n```\n-  Change the default search path\n```sql\nSET search_path TO new_schema, default_schema (public);\n```\n\n## BACKUP AND RESTORE DATABASES\n\n### Backup\n```bash\npg_dump --help //see all options\n```\n- Dump a database\n```bash\npg_dump -U username -d db_name -F format_file -f path/file_name.sql \n```\n\n- Dump all databases\n```bash\npg_dumpall -U username -f path/file_name.sql \n```\n\n### Restore\n```bash\npg_restore --help //see all options\n```\n- Using psql (.sql files)\n```bash\npsql -U username -d db_name -f path/backup_file_name.sql\n```  \n- Using pg_restore (.tar files)\n```bash\npg_restore -U username -d db_name path/backup_file_name.tar \n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famadr-95%2Fsql-advanced","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famadr-95%2Fsql-advanced","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famadr-95%2Fsql-advanced/lists"}