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或更高版本.
我想在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) 我将所有功能都保存在一个文本文件中'CREATE OR REPLACE FUNCTION somefunction'.因此,如果我添加或更改某些功能,我只需将文件提供给psql.
现在,如果我向现有函数添加或删除参数,它会创建一个具有相同名称的重载,并按照确切的顺序删除所有参数类型中的原始I类型,这是一种单调乏味的操作.
是否有某种通配符,我可以使用DROP具有给定名称的所有函数,所以我可以添加DROP FUNCTION行到我的文件的顶部?
我正在寻找一种简单的方法来删除数据库中的所有数据并保留结构(表,关系等......).我使用postgreSQL,但我认为,如果有命令这样做,它不是postgres特有的.
谢谢,
达米安
我正在尝试构建一个小型rails应用程序,以游戏格式向初学者教授sql.它的一部分是一个命令行,其中的用途试图解决sql的问题.在后端我想对测试数据库运行他们的sql命令,并检查结果以查看他们的命令是否正确.
我目前的想法是为课程的每个阶段创建sqlite数据库,然后在每个用户到达该阶段时为该数据库创建该数据库的副本.
我认为这会奏效,但我担心效率.
我的问题是,是否有一种有效的方法让用户运行SQL命令(包括drop,alter等),得到结果,但实际上并没有对db本身进行任何更改,实质上是任意sql命令的干运行.我熟悉sqlite和postgres,但我对其他数据库开放.
我通过搜索发现的所有内容在某种程度上都是错误的或不完整的。那么,我该如何:
我的数据库中有一个名为'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)
不会为我工作,因为据我所知,这会摧毁桌子.我不想破坏/重新创建......只是为了清除所有数据.
我该如何解决这个问题?
我试图使用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)
怎么做得好?
如何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
抽象的
为什么这不起作用:
$ 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) 可能重复:
截断postgres数据库中的所有表
如何在不删除数据库的情况下删除所有表中的所有数据?
我是Postgresql的初学者。在使用pgadmin安装和连接数据库时,我遇到了许多困难,我从所做的错误中学到了很多东西。现在我的疑问是,为什么\ l应该显示template0和template1,我在网上搜索了,但是不幸的是我没有找到合适的资源,但是我发现在删除两个DB(template0&template1)之后,我们无法创建数据库。
postgresql ×12
database ×4
dynamic-sql ×4
plpgsql ×4
sql ×3
function ×2
psql ×2
python ×2
activerecord ×1
alembic ×1
bash ×1
identifier ×1
psycopg2 ×1
ruby ×1
search-path ×1
sql-drop ×1
sqlalchemy ×1
sqlite ×1
truncate ×1