相关疑难解决方法(0)

表名作为PostgreSQL函数参数

我想在Postgres函数中传递一个表名作为参数.我试过这段代码:

CREATE OR REPLACE FUNCTION some_f(param character varying) RETURNS integer 
AS $$
    BEGIN
    IF EXISTS (select * from quote_ident($1) where quote_ident($1).id=1) THEN
     return 1;
    END IF;
    return 0;
    END;
$$ LANGUAGE plpgsql;

select some_f('table_name');
Run Code Online (Sandbox Code Playgroud)

我得到了这个:

ERROR:  syntax error at or near "."
LINE 4: ...elect * from quote_ident($1) where quote_ident($1).id=1)...
                                                             ^

********** Error **********

ERROR: syntax error at or near "."
Run Code Online (Sandbox Code Playgroud)

以下是更改为此时出现的错误select * from quote_ident($1) tab where tab.id=1:

ERROR:  column tab.id does not exist
LINE 1: ...T EXISTS …
Run Code Online (Sandbox Code Playgroud)

postgresql function dynamic-sql plpgsql identifier

69
推荐指数
4
解决办法
7万
查看次数

search_path如何影响标识符解析和"当前架构"

是否可以定义默认情况下创建新表的模式?(由"不合格的表名称"引用.)

我已经看到了在Postgres中使用"搜索路径"的一些细节,但我认为它只在检索数据时有效,而不是创建.

我有一堆SQL脚本,它们创建了许多表.我没有修改脚本,而是希望默认情况下在特定模式中设置数据库创建表 - 当它们具有非限定名称时.

这可能吗?

postgresql schema search-path database-table

46
推荐指数
2
解决办法
3万
查看次数

如何使用SQL Server将空白空间转换为空值?

我有一个表,此表上的列包含一些记录的空格.现在我需要将数据移动到另一个表并用NULL值替换空格.

我试着用:

REPLACE(ltrim(rtrim(col1)),' ',NULL)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.它会将所有值转换col1NULL.我只想将那些具有空格的值转换为NULL.

sql-server null is-empty

43
推荐指数
6
解决办法
15万
查看次数

Postgresql - 将整行返回为数组

有没有办法如何将以下结果转换为数组?

select pg_tables from pg_tables
Run Code Online (Sandbox Code Playgroud)

这将仅返回一列,但数据类型不是数组.

编辑:我正在使用PostgreSql 9.1.4

更新:我需要等效的以下SQL语句,而不需要编写适用于每个表的列名:

select 
    string_to_array(
    schemaname || '|' ||
    tablename || '|' || 
    tableowner || '|' ||
    coalesce(tablespace,'') || '|' ||
    hasindexes || '|' ||
    hasrules || '|' ||
    hastriggers
    ,'|')
from 
    pg_tables
Run Code Online (Sandbox Code Playgroud)

sql postgresql

6
推荐指数
2
解决办法
1万
查看次数

PostgreSQL:所有文本列中的 ILIKE

是否有一种简单的临时方式来ILIKE对表的所有文本列执行查询?

我知道有一个包含“foobar”的单元格。但是该表有很多列并且只有 50k 行,因此搜索所有列和行应该很快。

sql postgresql sql-like

5
推荐指数
1
解决办法
106
查看次数

默认情况下在postgres psql select语句中截断显示

我有一个带有长文本列的表.我希望能够选择所有列但限制文本列而无需编写每一列.

select * from resources;
Run Code Online (Sandbox Code Playgroud)

产生的输出太长而无法在psql中正确显示.我可以通过使用substr()left()在长列上显示某些内容,但之后我需要指定每列.

select id, left(data, 50), file_format_version, ... from resources;
Run Code Online (Sandbox Code Playgroud)

当我查询第一个时,是否有一种方法可以让psql默认截断长列select * from resources

postgresql select dynamic-sql psql

4
推荐指数
1
解决办法
3110
查看次数

在整个数据库中将空字符串 ('') 设置为 NULL

在我的数据库中有许多文本列,其中值是空字符串 ( '')。空字符串需要设置为NULL. 我不知道这个数据库中的确切模式、表和列,或者我想编写一个可以重用的通用解决方案。

我将如何编写查询/函数来查找所有模式中所有表中的所有文本列,并将所有带有空字符串 ( '') 的列更新为NULL

sql postgresql dynamic-sql information-schema plpgsql

2
推荐指数
1
解决办法
3135
查看次数