相关疑难解决方法(0)

选择其他表中不存在的行

我有两个postgresql表:

table name     column names
-----------    ------------------------
login_log      ip | etc.
ip_location    ip | location | hostname | etc.
Run Code Online (Sandbox Code Playgroud)

我想得到每个login_log没有行的IP地址ip_location.
我尝试了这个查询,但它抛出了语法错误.

SELECT login_log.ip 
FROM login_log 
WHERE NOT EXIST (SELECT ip_location.ip
                 FROM ip_location
                 WHERE login_log.ip = ip_location.ip)
Run Code Online (Sandbox Code Playgroud)
ERROR: syntax error at or near "SELECT"
LINE 3: WHERE NOT EXIST (SELECT ip_location.ip`
Run Code Online (Sandbox Code Playgroud)

我也想知道这个查询(通过调整使其工作)是否是用于此目的的最佳性能查询.

sql postgresql null exists left-join

150
推荐指数
2
解决办法
18万
查看次数

如何检查给定模式中是否存在表

Postgres 8.4及更高版本的数据库包含public模式中的模式和公司特定表中的公用表company.
company模式名称始终'company'以公司编号开头并以公司编号结束.
所以可能有以下模式:

public
company1
company2
company3
...
companynn
Run Code Online (Sandbox Code Playgroud)

应用程序始终适用于单个公司.
search_path相应指定在ODBC或连接Npgsql的字符串,如:

search_path='company3,public'
Run Code Online (Sandbox Code Playgroud)

如何检查给定表是否存在于指定的companyn模式中?

例如:

select isSpecific('company3','tablenotincompany3schema')
Run Code Online (Sandbox Code Playgroud)

应该返回false,并

select isSpecific('company3','tableincompany3schema')
Run Code Online (Sandbox Code Playgroud)

应该回来true.

在任何情况下,该函数应仅检查companyn传递的模式,而不检查其他模式.

如果两者public和传递的模式中都存在给定的表,则该函数应该返回true.
它适用于Postgres 8.4或更高版本.

sql database postgresql information-schema search-path

133
推荐指数
2
解决办法
14万
查看次数

在Postgres 9.0+中使用PL/pgSQL循环表

我想遍历所有表来计算每个表中的行数.以下查询给我一个错误:

DO $$
DECLARE
    tables CURSOR FOR
        SELECT tablename FROM pg_tables
        WHERE tablename NOT LIKE 'pg_%'
        ORDER BY tablename;
    tablename varchar(100);
    nbRow int;
BEGIN
    FOR tablename IN tables LOOP
        EXECUTE 'SELECT count(*) FROM ' || tablename INTO nbRow;
        -- Do something with nbRow
    END LOOP;
END$$;
Run Code Online (Sandbox Code Playgroud)

错误:

ERROR:  syntax error at or near ")"
LINE 1: SELECT count(*) FROM (sql_features)
                                          ^
QUERY:  SELECT count(*) FROM (sql_features)
CONTEXT:  PL/pgSQL function inline_code_block line 8 at EXECUTE statement
Run Code Online (Sandbox Code Playgroud)

sql_features是我的数据库中的表名.我已经尝试使用quote_ident()但无济于事.

postgresql variables loops plpgsql tablename

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

如何检查PostgreSQL中是否存在触发器?

我想验证数据库迁移的正确性,这会为某些表添加触发器.我正在使用sqitch,所以我想找到一种方法来检查SQL查询.我认为应该可以使用postgres系统表,但我目前找不到这样做的方法.

sql database postgresql triggers

11
推荐指数
1
解决办法
6335
查看次数

SELECT ... INTO的EXECUTE未实现

我试图在PostrgeSQL中运行此函数:

CREATE OR REPLACE FUNCTION create_partition_and_insert()
RETURNS trigger AS
$BODY$
DECLARE
partition VARCHAR(25);
_date text;
BEGIN
EXECUTE 'SELECT REPLACE(' || quote_literal(NEW.date) || ',''-'',''_'') into _date';
partition := TG_RELNAME || '_' || _date || ‘p’;
IF NOT EXISTS(SELECT relname FROM pg_class WHERE relname=partition) THEN
RAISE NOTICE 'A partition has been created %',partition;
EXECUTE 'CREATE TABLE ' || partition || ' (check (date = ''' || NEW.date || ''')) INHERITS (' || TG_RELNAME || ');';
END IF;
EXECUTE 'INSERT INTO ' || …
Run Code Online (Sandbox Code Playgroud)

postgresql triggers partitioning dynamic-sql plpgsql

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