相关疑难解决方法(0)

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

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万
查看次数

PostgreSQL删除所有内容

您好我想删除postgresql表中的所有数据,但不删除表本身.我怎么能这样做?

postgresql

88
推荐指数
4
解决办法
11万
查看次数

表名作为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万
查看次数

DROP FUNCTION不知道参数的数量/类型?

我将所有功能都保存在一个文本文件中'CREATE OR REPLACE FUNCTION somefunction'.因此,如果我添加或更改某些功能,我只需将文件提供给psql.

现在,如果我向现有函数添加或删除参数,它会创建一个具有相同名称的重载,并按照确切的顺序删除所有参数类型中的原始I类型,这是一种单调乏味的操作.

是否有某种通配符,我可以使用DROP具有给定名称的所有函数,所以我可以添加DROP FUNCTION行到我的文件的顶部?

postgresql dynamic-sql plpgsql sql-drop

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

如何清空SQL数据库?

我正在寻找一种简单的方法来删除数据库中的所有数据并保留结构(表,关系等......).我使用postgreSQL,但我认为,如果有命令这样做,它不是postgres特有的.

谢谢,

达米安

sql database postgresql truncate

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

我可以干运行/ sandbox sql命令吗?

我正在尝试构建一个小型rails应用程序,以游戏格式向初学者教授sql.它的一部分是一个命令行,其中的用途试图解决sql的问题.在后端我想对测试数据库运行他们的sql命令,并检查结果以查看他们的命令是否正确.

我目前的想法是为课程的每个阶段创建sqlite数据库,然后在每个用户到达该阶段时为该数据库创建该数据库的副本.

我认为这会奏效,但我担心效率.

我的问题是,是否有一种有效的方法让用户运行SQL命令(包括drop,alter等),得到结果,但实际上并没有对db本身进行任何更改,实质上是任意sql命令的干运行.我熟悉sqlite和postgres,但我对其他数据库开放.

sql database sqlite postgresql ruby-on-rails

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

清除 postgresql 和 alembic 并从头开始

我通过搜索发现的所有内容在某种程度上都是错误的或不完整的。那么,我该如何:

  • 删除我的 postgresql 数据库中的所有内容
  • 删除我所有的 Alembic 修订版
  • 使我的数据库 100% 像新的一样

python postgresql sqlalchemy alembic

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

psql - 如何在不丢弃表的情况下刷新数据库内容

我的数据库中有一个名为'mytable'的表.我想清除它,以便我可以继续收集和分析它的"新数据".

就像是

conn = psycopg2.connect(database = mydb_name, host = mydb_server, user = mydb_uname, password = mydb_pwd)
cur = conn.cursor()
cur.execute("DROP TABLE mytable;")
Run Code Online (Sandbox Code Playgroud)

不会为我工作,因为据我所知,这会摧毁桌子.我不想破坏/重新创建......只是为了清除所有数据.

我该如何解决这个问题?

python psycopg2 postgresql-9.2 psql

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

截断PostgreSQL中模式中的所有表

我试图使用PostgreSQL截断模式中的所有表.它显示此错误:

ERROR:  relation "Building" does not exist
CONTEXT:  SQL statement "TRUNCATE TABLE "Building" CASCADE"
PL/pgSQL function truncate_schema(character varying) line 15 at EXECUTE statement
Run Code Online (Sandbox Code Playgroud)

这是我使用的功能:

CREATE OR REPLACE FUNCTION truncate_schema(schema IN VARCHAR) RETURNS void AS $$
DECLARE
    statements CURSOR FOR
        SELECT table_name FROM information_schema.tables
WHERE table_type = 'BASE TABLE' AND table_schema = schema;
BEGIN
    FOR stmt IN statements LOOP
        EXECUTE 'TRUNCATE TABLE ' || quote_ident(stmt.table_name) || ' CASCADE';
    END LOOP;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

怎么做得好?

postgresql function dynamic-sql plpgsql

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

PL / pgSQL函数中的动态SELECT INTO

如何SELECT INTO在Postgres的PL / pgSQL函数内编写动态查询?

假设我有一个名为的变量tb_name,它填充在的FOR循环中information_schema.tables。现在,我有一个名为的变量tc,它将获取每个表的行数。我想要以下内容:

FOR tb_name in select table_name from information_schema.tables where table_schema='some_schema' and table_name like '%1%'
LOOP
EXECUTE FORMAT('select count(*) into' || tc 'from' || tb_name);
END LOOP
Run Code Online (Sandbox Code Playgroud)

应该是什么数据类型tb_name,并tc在这种情况下?

postgresql dynamic-sql plpgsql variable-assignment stored-functions

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

是否可以在 psql 中组合“-c”和“-v”?

抽象的

为什么这不起作用:

$ psql -X -h localhost -d mydatabase -U postgres -v myschema=foo -c "SELECT :'myschema';"
ERROR:  syntax error at or near ":"
LINE 1: SELECT :'myschema';
               ^
Run Code Online (Sandbox Code Playgroud)

但这按预期工作:

$ psql -X -h localhost -d mydatabase -U postgres -v myschema=foo

mydatabase=# SELECT :'myschema';
 ?column? 
----------
 foo
(1 row)
Run Code Online (Sandbox Code Playgroud)

是否可以在通话中组合-c和。-vpsql

语境

我正在尝试使用 bash 脚本执行DO这个)PostgreSQL 语句psql -c,我想将其中一个WHERE条件作为psql 变量传递

像这样的东西:

SCHEMA='foo'

! read -d '' sql_query << "EOF"
DO
$func$ …
Run Code Online (Sandbox Code Playgroud)

postgresql bash psql

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

4
推荐指数
2
解决办法
1428
查看次数

为什么我们在postgresql上需要template0和template1?

我是Postgresql的初学者。在使用pgadmin安装和连接数据库时,我遇到了许多困难,我从所做的错误中学到了很多东西。现在我的疑问是,为什么\ l应该显示template0和template1,我在网上搜索了,但是不幸的是我没有找到合适的资源,但是我发现在删除两个DB(template0&template1)之后,我们无法创建数据库。

postgresql postgresql-10

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