CSh*_*ned 51 postgresql information-schema
在PostgreSQL中有一个简单的替代方法来生成Oracle中的这个语句吗?
select table_name from user_tab_columns
where table_name = myTable and column_name = myColumn;
Run Code Online (Sandbox Code Playgroud)
然后我测试查询是否返回任何内容以证明列存在.
我知道使用psql我可以单独找到这些,但这是在我编写的程序中生成结果以验证我的数据库表中存在请求的属性字段所必需的.
Ram*_*ngh 102
试试这个 :
SELECT column_name
FROM information_schema.columns
WHERE table_name='your_table' and column_name='your_column';
Run Code Online (Sandbox Code Playgroud)
jua*_*aza 28
接受的答案是正确的,但缺少架构和更好的输出(真/假):
SELECT EXISTS (SELECT 1
FROM information_schema.columns
WHERE table_schema='my_schema' AND table_name='my_table' AND column_name='my_column');
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 15
使用PostgreSQL的对象标识符类型更简单(并且SQLi安全):
SELECT TRUE
FROM pg_attribute
WHERE attrelid = 'myTable'::regclass -- cast to a registered class (table)
AND attname = 'myColumn'
AND NOT attisdropped -- exclude dropped (dead) columns
-- AND attnum > 0 -- exclude system columns (you may or may not want this)
Run Code Online (Sandbox Code Playgroud)
如果要构建动态SQL并且您的列名作为参数提供,则可能需要使用quote_ident()以避免SQL注入:
...
AND attname = quote_ident('myColumn');
Run Code Online (Sandbox Code Playgroud)
适用于以外的表格search_path:
...
WHERE attrelid = 'mySchema.myTable'::regclass
...
Run Code Online (Sandbox Code Playgroud)
小智 5
与 Oracle 不同,PostgreSQL 支持 ANSI 标准INFORMATION_SCHEMA视图。
Oracle的user_tab_columns对应的标准视图是information_schema.columns
http://www.postgresql.org/docs/current/static/infoschema-columns.html