2016-06-14 2 views
-1

나는이 Q를 찾지 못했을 것이라고 생각합니다. 그러나, 그것을 위해 인터넷 검색은 매우 오래된 페이지를 가져옵니다. 나는 올바른 키워드를 찾지 못했을 것입니다. 이 Q를 Database Admins에 게시하면 답이 나오지 않습니다. 질문 자체에 데이터베이스 크기 제한

:

은 내가 데이터베이스 크기를 제한하는 포스트 그레스의 기능에 대해 읽은 것을 확신합니다. 그러나 나는 오늘 매뉴얼에서 그것을 발견 할 수 없다.

나는 그것을 명심해야 하나? 어떻게하면 데이터베이스의 크기를 제한 할 수 있습니까?

+0

링크를 .. 내 구글 결과의 그 –

+0

호기심 https://www.google.de/?client=safari#q=restrict+database+size + postgres 2005, 2008, ... 답변은 @daniel의 답변과 같습니다. 내가 읽은 것에 대해 꽤 확신했기 때문에 나는 웹에있는 정보가 구식이라고 생각했다. 분명히 그렇지 않습니다. –

+0

링크를 가져 주셔서 감사합니다. 나는 아주 오래된 버전의 문서화를 의미한다고 생각했습니다. 사실 대니얼스 대답은 FS 용량 제한을 사용하는 것이 훨씬 더 효율적입니다. –

답변

1

Postgres에 내장 된 할당량 시스템이 없으므로이 내용을 잘못 생각한 것 같습니다.

그러나, 당신은 그것을 몇 가지 방법을 할 수있는 :

  1. 는 각 사용자의 테이블 스페이스를 작성합니다. 파일 시스템에 할당량이있는 경우 일치시킬 수 있습니다. 물론 데이터베이스의 무결성을 위험에 빠뜨리고 있습니다. 나는 그것을 시도하지 않을 것이다.

  2. 계정에 INSERT을 사용하지 않도록 설정하는 스크립트를 작성하십시오. pg_database_size을 사용하여 데이터베이스의 디스크 사용량을 쿼리 할 수 ​​있습니다. 나는 쉘 스크립트를 작성하여 액세스 권한을 취소 및 취소하고 cron을 사용하여 주기적으로 실행합니다.

예 :

evlaopt=# select pg_database_size('evlaopt'); 
pg_database_size 
------------------ 
     9240136352 
(1 row) 

evlaopt=# select pg_size_pretty(pg_database_size('evlaopt')); 
pg_size_pretty 
---------------- 
8812 MB 
(1 row) 

(evlaopt 내 컴퓨터에 데이터베이스입니다.)

하는 말 (사용자와 이름이 일치하는 데이터베이스를 가지고 있고, 그들은 모두 동일한 할당량이 있다고 가정) 100MB. 당신은 같은 것을 할 수있는 : 옛날 페이지에

# grant access to databases below the limit 
for DB in $(psql -At -c 'SELECT datname FROM pg_database WHERE NOT datistemplate AND pg_database_size(datname) < 1024 * 1024 * 100'); do 
    psql -At -c "GRANT INSERT ON ALL TABLES IN SCHEMA public TO $DB" $DB 
done 

# revoke access to databases at or above the limit 
for DB in $(psql -At -c 'SELECT datname FROM pg_database WHERE NOT datistemplate AND pg_database_size(datname) >= 1024 * 1024 * 100'); do 
    psql -At -c "REVOKE INSERT ON ALL TABLES IN SCHEMA public FROM $DB" $DB 
done 
+0

저는 이것이 heroku가하는 일이라고 생각합니다. 가장 큰 테이블에서 행 수가 많고 권한을 취소합니다. –

+0

@VaoTsun 및 Daniel Lyons에게 감사합니다. Objective-Cloud를위한 것입니다. 제 3 자 개발자의 앱을 호스팅하고 그들의 앱은 데이터베이스에 액세스 할 수 있습니다. 이 서비스는 req-resp 모델을 기반으로하기 때문에 각 1000 또는 reqs마다 낮은 우선 순위 백그라운드 스레드를 시작하기 만하면됩니다. –