[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PBTXWD60ZCHTRP047C5XG7":3,"skill-same:01M6PBTXWD60ZCHTRP047C5XG7":103},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":27,"publishedAt":48,"linkOnly":49,"markdownContent":50,"markdownBody":51,"frontMatter":52,"refName":34,"commitSha":64,"skillDirectory":65,"forksCount":13,"repositoryHtmlUrl":66,"repositoryHomepageUrl":6,"ownerHtmlUrl":67,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":68,"install":69,"resources":82},"01M6PBTXWD60ZCHTRP047C5XG7","postgres-readonly-queries",null,"Execute safe read-only SQL queries against PostgreSQL databases with multi-connection support and defense-in-depth write protection.","duc-duy-1612\u002FOnline-Delivery-Systems-Web","duc-duy-1612","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F192231384?v=4","01M6NSDKQQDKVTHZ8DZMZ1VYY6","01M6NSDKW8DDVTQHBT1HBDDJPT",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fpostgres-readonly-queries\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],"postgres readonly queries","postgres","queries","readonly","tree","safe","main","community","sql queries","databases","only","write","read","defense","data","defense-in-depth","postgresql","database","sql","support","2026-11-10 10:12:30",false,"---\nname: postgres-readonly-queries\ndescription: \"Execute safe read-only SQL queries against PostgreSQL databases with multi-connection support and defense-in-depth write protection.\"\ncategory: data\nrisk: safe\nsource: https:\u002F\u002Fgithub.com\u002Fsanjay3290\u002Fai-skills\u002Ftree\u002Fmain\u002Fskills\u002Fpostgres\nsource_repo: sanjay3290\u002Fai-skills\nsource_type: community\ndate_added: \"2026-07-09\"\nauthor: sanjay3290\ntags: [postgres, sql, database, read-only]\ntools: [claude, cursor, gemini]\nlicense: \"Apache-2.0\"\nlicense_source: \"https:\u002F\u002Fgithub.com\u002Fsanjay3290\u002Fai-skills\u002Fblob\u002Fmain\u002FLICENSE\"\n---\n\n# PostgreSQL Read-Only Query Skill\n\n## When to Use\n\n- Use when querying PostgreSQL databases and access must stay strictly read-only\n- Use when exploring schemas, tables, and data across multiple configured connections\n- Use when you want defense-in-depth protection against accidental INSERT\u002FUPDATE\u002FDELETE or DDL\n\nExecute safe, read-only queries against configured PostgreSQL databases.\n\n## Requirements\n\n- Python 3.8+\n- psycopg2-binary: `pip install -r requirements.txt`\n\n## Setup\n\nCreate `connections.json` in the skill directory or `~\u002F.config\u002Fclaude\u002Fpostgres-connections.json`.\n\n**Security**: Set file permissions to `600` since it contains credentials:\n```bash\nchmod 600 connections.json\n```\n\n```json\n{\n  \"databases\": [\n    {\n      \"name\": \"production\",\n      \"description\": \"Main app database - users, orders, transactions\",\n      \"host\": \"db.example.com\",\n      \"port\": 5432,\n      \"database\": \"app_prod\",\n      \"user\": \"readonly_user\",\n      \"password\": \"your-password\",\n      \"sslmode\": \"require\"\n    }\n  ]\n}\n```\n\n### Config Fields\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| name | Yes | Identifier for the database (case-insensitive) |\n| description | Yes | What data this database contains (used for auto-selection) |\n| host | Yes | Database hostname |\n| port | No | Port number (default: 5432) |\n| database | Yes | Database name |\n| user | Yes | Username |\n| password | Yes | Password |\n| sslmode | No | SSL mode: disable, allow, prefer (default), require, verify-ca, verify-full |\n\n## Usage\n\n### List configured databases\n```bash\npython3 scripts\u002Fquery.py --list\n```\n\n### Query a database\n```bash\npython3 scripts\u002Fquery.py --db production --query \"SELECT * FROM users LIMIT 10\"\n```\n\n### List tables\n```bash\npython3 scripts\u002Fquery.py --db production --tables\n```\n\n### Show schema\n```bash\npython3 scripts\u002Fquery.py --db production --schema\n```\n\n### Limit results\n```bash\npython3 scripts\u002Fquery.py --db production --query \"SELECT * FROM orders\" --limit 100\n```\n\n## Database Selection\n\nMatch user intent to database `description`:\n\n| User asks about | Look for description containing |\n|-----------------|--------------------------------|\n| users, accounts | users, accounts, customers |\n| orders, sales | orders, transactions, sales |\n| analytics, metrics | analytics, metrics, reports |\n| logs, events | logs, events, audit |\n\nIf unclear, run `--list` and ask user which database.\n\n## Safety Features\n\n- **Read-only session**: Connection uses PostgreSQL `readonly=True` mode (primary protection)\n- **Query validation**: Only SELECT, SHOW, EXPLAIN, WITH queries allowed\n- **Single statement**: Multiple statements per query rejected\n- **SSL support**: Configurable SSL mode for encrypted connections\n- **Query timeout**: 30-second statement timeout enforced\n- **Memory protection**: Max 10,000 rows per query to prevent OOM\n- **Column width cap**: 100 char max per column for readable output\n- **Credential sanitization**: Error messages don't leak passwords\n\n## Troubleshooting\n\n| Error | Solution |\n|-------|----------|\n| Config not found | Create `connections.json` in skill directory |\n| Authentication failed | Check username\u002Fpassword in config |\n| Connection timeout | Verify host\u002Fport, check firewall\u002FVPN |\n| SSL error | Try `\"sslmode\": \"disable\"` for local databases |\n| Permission warning | Run `chmod 600 connections.json` |\n\n## Exit Codes\n\n- **0**: Success\n- **1**: Error (config missing, auth failed, invalid query, database error)\n\n## Workflow\n\n1. Run `--list` to show available databases\n2. Match user intent to database description\n3. Run `--tables` or `--schema` to explore structure\n4. Execute query with appropriate LIMIT\n\n## Limitations\n\n- Read-only protections reduce accidental writes but cannot override database-server policy,\n  triggers, extensions, or an over-privileged account. Use a database role with read-only\n  permissions as the primary control.\n- Query results can contain personal, confidential, or regulated data. Confirm the intended\n  database and avoid exporting or sharing results without explicit authorization.\n- The script is not a replacement for backups, auditing, access reviews, or production change\n  controls.\n","# PostgreSQL Read-Only Query Skill\n\n## When to Use\n\n- Use when querying PostgreSQL databases and access must stay strictly read-only\n- Use when exploring schemas, tables, and data across multiple configured connections\n- Use when you want defense-in-depth protection against accidental INSERT\u002FUPDATE\u002FDELETE or DDL\n\nExecute safe, read-only queries against configured PostgreSQL databases.\n\n## Requirements\n\n- Python 3.8+\n- psycopg2-binary: `pip install -r requirements.txt`\n\n## Setup\n\nCreate `connections.json` in the skill directory or `~\u002F.config\u002Fclaude\u002Fpostgres-connections.json`.\n\n**Security**: Set file permissions to `600` since it contains credentials:\n```bash\nchmod 600 connections.json\n```\n\n```json\n{\n  \"databases\": [\n    {\n      \"name\": \"production\",\n      \"description\": \"Main app database - users, orders, transactions\",\n      \"host\": \"db.example.com\",\n      \"port\": 5432,\n      \"database\": \"app_prod\",\n      \"user\": \"readonly_user\",\n      \"password\": \"your-password\",\n      \"sslmode\": \"require\"\n    }\n  ]\n}\n```\n\n### Config Fields\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| name | Yes | Identifier for the database (case-insensitive) |\n| description | Yes | What data this database contains (used for auto-selection) |\n| host | Yes | Database hostname |\n| port | No | Port number (default: 5432) |\n| database | Yes | Database name |\n| user | Yes | Username |\n| password | Yes | Password |\n| sslmode | No | SSL mode: disable, allow, prefer (default), require, verify-ca, verify-full |\n\n## Usage\n\n### List configured databases\n```bash\npython3 scripts\u002Fquery.py --list\n```\n\n### Query a database\n```bash\npython3 scripts\u002Fquery.py --db production --query \"SELECT * FROM users LIMIT 10\"\n```\n\n### List tables\n```bash\npython3 scripts\u002Fquery.py --db production --tables\n```\n\n### Show schema\n```bash\npython3 scripts\u002Fquery.py --db production --schema\n```\n\n### Limit results\n```bash\npython3 scripts\u002Fquery.py --db production --query \"SELECT * FROM orders\" --limit 100\n```\n\n## Database Selection\n\nMatch user intent to database `description`:\n\n| User asks about | Look for description containing |\n|-----------------|--------------------------------|\n| users, accounts | users, accounts, customers |\n| orders, sales | orders, transactions, sales |\n| analytics, metrics | analytics, metrics, reports |\n| logs, events | logs, events, audit |\n\nIf unclear, run `--list` and ask user which database.\n\n## Safety Features\n\n- **Read-only session**: Connection uses PostgreSQL `readonly=True` mode (primary protection)\n- **Query validation**: Only SELECT, SHOW, EXPLAIN, WITH queries allowed\n- **Single statement**: Multiple statements per query rejected\n- **SSL support**: Configurable SSL mode for encrypted connections\n- **Query timeout**: 30-second statement timeout enforced\n- **Memory protection**: Max 10,000 rows per query to prevent OOM\n- **Column width cap**: 100 char max per column for readable output\n- **Credential sanitization**: Error messages don't leak passwords\n\n## Troubleshooting\n\n| Error | Solution |\n|-------|----------|\n| Config not found | Create `connections.json` in skill directory |\n| Authentication failed | Check username\u002Fpassword in config |\n| Connection timeout | Verify host\u002Fport, check firewall\u002FVPN |\n| SSL error | Try `\"sslmode\": \"disable\"` for local databases |\n| Permission warning | Run `chmod 600 connections.json` |\n\n## Exit Codes\n\n- **0**: Success\n- **1**: Error (config missing, auth failed, invalid query, database error)\n\n## Workflow\n\n1. Run `--list` to show available databases\n2. Match user intent to database description\n3. Run `--tables` or `--schema` to explore structure\n4. Execute query with appropriate LIMIT\n\n## Limitations\n\n- Read-only protections reduce accidental writes but cannot override database-server policy,\n  triggers, extensions, or an over-privileged account. Use a database role with read-only\n  permissions as the primary control.\n- Query results can contain personal, confidential, or regulated data. Confirm the intended\n  database and avoid exporting or sharing results without explicit authorization.\n- The script is not a replacement for backups, auditing, access reviews, or production change\n  controls.\n",{"name":5,"risk":33,"tags":53,"tools":55,"author":59,"source":60,"license":14,"category":42,"date_added":61,"description":7,"source_repo":62,"source_type":35,"license_source":63},[29,46,45,54],"read-only",[56,57,58],"claude","cursor","gemini","sanjay3290","https:\u002F\u002Fgithub.com\u002Fsanjay3290\u002Fai-skills\u002Ftree\u002Fmain\u002Fskills\u002Fpostgres","2026-07-09","sanjay3290\u002Fai-skills","https:\u002F\u002Fgithub.com\u002Fsanjay3290\u002Fai-skills\u002Fblob\u002Fmain\u002FLICENSE","f3312ba749561b6159f477dbfc9313c875d40a56",".agents\u002Fskills_archive\u002Fpostgres-readonly-queries","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612","2026-10-25 23:50:58",{"source":8,"skillName":5,"commands":70,"prompt":80,"zipAvailable":81},[71,74,77],{"tool":72,"command":73},"npx","npx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill postgres-readonly-queries",{"tool":75,"command":76},"bunx","bunx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill postgres-readonly-queries",{"tool":78,"command":79},"pnpm","pnpm dlx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill postgres-readonly-queries","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fpostgres-readonly-queries\u002FSKILL.md",true,[83,89,93,97],{"path":84,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":87,"sourceHtmlUrl":88},"connections.example.json","REFERENCE","参考文档",931,"https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fpostgres-readonly-queries\u002Fconnections.example.json",{"path":90,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":91,"sourceHtmlUrl":92},"README.md",1840,"https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fpostgres-readonly-queries\u002FREADME.md",{"path":94,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":95,"sourceHtmlUrl":96},"requirements.txt",26,"https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fpostgres-readonly-queries\u002Frequirements.txt",{"path":98,"resourceType":99,"resourceTypeDesc":100,"sizeBytes":101,"sourceHtmlUrl":102},"scripts\u002Fquery.py","SCRIPT","脚本",9398,"https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fpostgres-readonly-queries\u002Fscripts\u002Fquery.py",[104,131,154,178,201,225],{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":108,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":114,"publishedAt":48},"01M6Q0FA5FZ410Z33Z3TFQ4DBA","zero-trust","Implement zero-trust network architecture. Configure identity-based access, micro-segmentation, and continuous verification. Use when implementing modern security architectures.","MIT","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzero-trust\u002FSKILL.md",[111],{"categoryNo":112,"categoryName":113,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署",[115,116,117,118,119,120,106,121,122,123,124,38,35,34,125,126,127,128,129,130],"ZeRO","trust","zero trust","architecture","assessment","verification","segmentation","devops-security","access","configure","active","critical","scope","scripts","relevant","implementing",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":108,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":48},"01M6Q0F1YZJW3KX5FBKEVZ8CV4","zcode-delegate","Delegate coding tasks to the Z.AI ZCode CLI only when the user explicitly requests it, while the orchestrator retains review and landing responsibility.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzcode-delegate\u002FSKILL.md",[],[138,139,140,141,142,143,144,145,146,147,148,40,149,38,150,35,151,152,126,153],"delegate","zcode","zcode delegate","review","cli","orchestration","tasks","run","Bash","model","node","orchestrator","files","desktop app","app","agent-orchestration",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":108,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":160,"publishedAt":48},"01M6Q0ETK41VGNMYEXW0T00AJN","youtube-transcript","Fetch YouTube transcripts through DeepAPI or local fallback tooling and save clean text output.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript\u002FSKILL.md",[],[161,162,163,33,164,165,166,167,168,169,170,171,172,35,34,173,174,175,176,177],"transcript","youtube transcript","youtube","github","codex","research","license","https","text","fetch","tooling","clean","local","output","deepapi","youtube transcripts","blob",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":108,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":191,"publishedAt":48},"01M6Q0EPPH2PVMDW40017F8WX0","youtube-transcript-skills","Fetch YouTube video transcripts, search videos\u002Fchannels, browse channels, and extract playlists via the getyoutubetranscript.com API - free tier, no card required.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript-skills\u002FSKILL.md",[184,185,188],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":186,"categoryName":187,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":189,"categoryName":190,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000030","开发工程师",[161,162,163,192,33,58,164,165,167,193,194,195,196,170,197,35,34,198,199,200],"youtube transcript skills","search","api","Video","browse","api-integration","free","card","channels",{"skillNo":202,"name":203,"nameZh":6,"description":204,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":108,"licenseFileUrl":6,"sourceHtmlUrl":205,"categories":206,"keywords":211,"publishedAt":48},"01M6Q0EAB96PX83W5PTE8A0R8D","youtube-notetaker","Turn YouTube talks into local study notes with slides, transcripts, editable annotations, and a markdown-backed viewer.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-notetaker\u002FSKILL.md",[207,210],{"categoryNo":208,"categoryName":209,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":186,"categoryName":187,"taxonomyType":20,"taxonomyTypeDesc":21},[163,212,213,142,33,214,215,216,217,167,195,218,219,220,221,34,222,173,223,224],"youtube notetaker","notetaker","workflow","official","notes","code","markdown","slides","annotations","README","study","dair-academy","viewer",{"skillNo":226,"name":227,"nameZh":6,"description":228,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":108,"licenseFileUrl":6,"sourceHtmlUrl":229,"categories":230,"keywords":232,"publishedAt":48},"01M6Q0E55F0GW5MX48V8HXS8B5","youtube-full","Fetch YouTube transcripts, search videos, browse channels, and extract playlists via TranscriptAPI — no yt-dlp, no Google API key, works from any cloud server.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-full\u002FSKILL.md",[231],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[233,163,234,235,33,58,193,236,237,194,195,196,170,238,197,35,34,198,239,176],"youtube full","full","google","server","dlp","credits","automatic"]