在SAS中删除表的最有效方法是什么?
我有一个循环和删除大量表的程序,并想知道PROC SQL之间是否存在性能差异; 和PROC DATASETS; 一次删除一个表..
或者如果有另一种方式或许???
我在用
drop table <table_name>
Run Code Online (Sandbox Code Playgroud)
如果我重新创建具有相同模式和名称的表,我将返回旧数据.我应该从hdfs文件系统中删除表目录以完全摆脱数据吗?
类似的问题在这里,但没有一个答案实际上回答了这个问题.接受的答案只显示如何登录到控制台并销毁所有记录.在这种情况下,这不是我需要的.
我需要完全废弃一个表(它没有关联)并使用现有的迁移重新创建它.
有类似的东西吗?
heroku pg:destroy_table "Products"
Run Code Online (Sandbox Code Playgroud)
然后,我将再次运行我的迁移,它将使用新架构创建表:
heroku run rake db:migrate
Run Code Online (Sandbox Code Playgroud) 为什么删除 PostgreSQL 中的表需要ACCESS EXCLUSIVE锁定任何引用的表?如何将其减少到ACCESS SHARED锁定或根本不锁定?即有没有办法在不锁定引用表的情况下删除关系?
我在文档中找不到任何关于需要哪些锁的提及,但是除非我在并发操作期间删除多个表时以正确的顺序明确获取锁,否则我可以看到死锁在日志中等待 AccessExclusiveLock,并获取此限制当表被删除时,对常用表的锁定会导致其他进程的暂时延迟。
澄清,
CREATE TABLE base (
id SERIAL,
PRIMARY KEY (id)
);
CREATE TABLE main (
id SERIAL,
base_id INT,
PRIMARY KEY (id),
CONSTRAINT fk_main_base (base_id)
REFERENCES base (id)
ON DELETE CASCADE ON UPDATE CASCADE
);
DROP TABLE main; -- why does this need to lock base?
Run Code Online (Sandbox Code Playgroud) 在轨道4文档(http://guides.rubyonrails.org/migrations.html#creating-a-join-table)我看到删除表或一个连接表,可以使用命令行以下方法:
drop_table和drop_join_table.
然而,它进一步补充说,必须"提供一个块" - 我不知道执行中的样子.
无论这里是我的问题:如何删除表或删除连接表?
另外,当我说丢弃时,我的意思是从我的数据库中删除它.我知道我无法删除迁移,并且回滚迁移是不明智的,因为它会影响协作工作 - 所以我想避免删除迁移文件并尽可能地回滚迁移.
创建迁移以填充数据库时,我犯了一个错误.我知道如何修改表的列(添加新的,重命名和删除它们).我只是不知道如何清除表格.
感谢您考虑我的问题.
我想从我的数据库中完全删除一个表.我的应用程序在Rails 4上运行.
我正在看sqlalchemy的aiopg用法示例,这些行使我感到恐惧:
async def create_table(conn):
await conn.execute('DROP TABLE IF EXISTS tbl')
await conn.execute(CreateTable(tbl))
Run Code Online (Sandbox Code Playgroud)
使用sqlalchemy时,我不想执行原始sql查询。但是我找不到其他方法来实现相同的逻辑。我的尝试是:
1)
await conn.execute(tbl.drop(checkfirst=True))
Run Code Online (Sandbox Code Playgroud)
这引起了:
sqlalchemy.exc.UnboundExecutionError:表对象“ tbl”未绑定到引擎或连接。没有要执行的数据库,执行将无法进行。
我也找不到将表绑定到引擎的方法,因为aiopg不支持元数据。
2)
await conn.execute(DropTable(tbl))
Run Code Online (Sandbox Code Playgroud)
这引起了:
psycopg2.errors.UndefinedTable:表“ tbl”不存在
似乎DropTable构造不IF EXISTS以任何方式支持部分。
因此,问题是,await conn.execute('DROP TABLE IF EXISTS tbl')使用aiopg + sqlalchemy时,有没有办法将语句重写为没有原始sql的内容?
是否有可能在mysql表创建中编写额外的代码,使其在X时间后自行丢弃?像临时表一样,但它会持续更长时间.
我需要为临时任务创建表,但我需要它们比会话持续更长时间
我有一个 SQL 脚本文件,它删除并重新创建各种表,并将各种记录插入到这些表中。该脚本在 SQL 查询控制台中执行时运行良好,但我需要它由实体管理器执行。
关于我如何能够做到这一点的任何想法?
谢谢,
H
我使用'on commit drop'选项在函数中使用临时表.我的问题是,在某些情况下,一个更全局的函数可以调用第一个两次,所以"创建临时表"在提交之前被调用两次 - 所以我有正常的错误"relation [my_temp_table]已经存在".
我使用函数末尾的临时表来返回"返回查询"中的行,所以在离开函数之前我无法手动删除表.
CREATE OR REPLACE FUNCTION my_function(_value text)
RETURNS setof my_table AS $$
DECLARE
resultCount integer := 0;
BEGIN
create temp table my_temp_table on commit drop as
select *
from my_table
where value = _value ;
select count(*) into resultCount from my_temp_table;
if (resultCount = 0) then
raise exception 'value not found';
end if;
return query
select * from my_temp_table;
END;$$ LANGUAGE plpgsql VOLATILE COST 100;
ALTER FUNCTION my_function(text) OWNER TO postgres
Run Code Online (Sandbox Code Playgroud)
如果你想知道为什么我直接使用临时表而不是my_table,那是因为我需要一个非常快的响应而且my_table非常大(几十万行)所以这样我只能请求一次而不是三次(搜索,计数和返回).
我找到了一个不使用临时表并创建类型的解决方法,但是my_table的结构会改变很多次,实际上我有几十个"我的表"和关注的"我的函数",所以这是一种不再写的方法每次我的表结构都会改变时,我的所有功能.
该函数必须返回与其请求的表相同的结构. …
我只想在存在表的情况下使用Liquibase在MySQL中删除表。
我无法弄清楚如何检查Liquibase中是否存在表。
谢谢。
drop-table ×10
postgresql ×4
database ×2
mysql ×2
sql ×2
aiopg ×1
hdfs ×1
heroku ×1
hive ×1
jpa ×1
liquibase ×1
proc-sql ×1
python ×1
sas ×1
sql-scripts ×1
sqlalchemy ×1