2014-07-15 1 views
2

있는 테이블의 순서를 증가PostgreSQL은 내가 하나에 다음과 같은 두 개의 쿼리를 결합 할 하나 개의 쿼리

SELECT setval(SELECT pg_get_serial_sequence('purchase_orders', 'id'), 30000); 

ERROR: syntax error at or near "SELECT" 
SQL state: 42601 
Character: 15 

setval에 대한 선택 결과 ("purchase_orders_id_seq")를 어떻게 전달할 수 있습니까?

편집 :이 이유는 다음과 같습니다. 사용자가 테이블의 이름과 시퀀스 번호를 입력해야하는 함수처럼 사용하고 싶습니다.

FUNCTION set_id_sequence(TEXT table_name, INTEGER sequence); 
+0

질문을 편집하고 실패한 쿼리를 추가하십시오. –

+0

'pg_serial_get_sequence' 란 무엇입니까? 나는 그것을 들어 보지 못했고, 9.4 설치는'\ df pg_get_serial_sequence'로 질문 할 때 무지라고 공언합니다. 당신이 여기서 달성/고치려고하는 것은 무엇입니까? 어떤 문제를 해결하려고합니까? –

+0

나는 질문을 편집했는데, 지금은 더 분명해 졌을 것입니다. –

답변

3

, 당신이 그것을 괄호가 필요합니다

SELECT setval((SELECT pg_get_serial_sequence('purchase_orders', 'id')), 30000); 

하지만이 경우 , SELECT는 중복됩니다. 함수를 직접 호출 할 수 있습니다.

SELECT setval(pg_get_serial_sequence('purchase_orders', 'id'), 30000); 
+0

예! 그게 다야! 고맙습니다. 중복 SELECT였습니다. :-) –

0

변경 순서 소유자 :

ALTER SEQUENCE purchase_orders_id_seq OWNED BY purchase_orders.id; 

설정 순서 값 : 당신이 함수 인수로 하위 쿼리 결과를 전달하려는 경우

SELECT pg_catalog.setval('purchase_orders_id_seq', 30000, true); 
ALTER TABLE ONLY purchase_orders ALTER COLUMN id SET DEFAULT 
    nextval('purchase_orders_id_seq'::regclass); 
+0

거의 다되었습니다! 그러나 SET DEFAULT는 :: regclass에 대해 pg_get_serial_sequence ('purchase_orders', 'id')를 허용하지 않습니다. 따라서 purchase_orders 테이블을 수정하려는 사람은 여전히 ​​'purchase_orders_id_seq'식별자를 알아야합니다. 내가 생각한 것은 set_id_sequence (TEXT table_name, INTEGER sequence)와 같은 함수였다. 따라서이 함수를 호출하는 사람은 테이블의 이름 만 알아야합니다. –