PostgreSQL声明式分区

时间:2018-11-13 11:48:07

标签: postgresql database-partitioning postgresql-11

我试图了解在我的特定情况下如何使用声明性分区。

我有一张看起来像的桌子

var scene,scene2,camera, controls, pointLight, stats;    
var composer, renderer, mixer;

var params = {
  exposure: 1,
  bloomStrength: 1.5,
  bloomThreshold: 0,
  bloomRadius: 0
};

var objects = [];

var clock = new THREE.Clock();
var container = document.getElementById( 'container' );

stats = new Stats();
//container.appendChild( stats.dom );

renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.toneMapping = THREE.ReinhardToneMapping;
container.appendChild( renderer.domElement );

scene  = new THREE.Scene();
//scene2 = new THREE.Scene();

camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 100 );
camera.position.set( 2.5,2.5, 10 );
scene.add( camera );
// scene2.add( camera );

controls = new THREE.OrbitControls( camera, renderer.domElement );
controls.maxPolarAngle = Math.PI * 0.5;
controls.minDistance = 1;
controls.maxDistance = 10;
controls.target.set(2.5,2.5,0)
controls.update()

// scene.add( new THREE.AmbientLight( 0x404040 ) );

pointLight = new THREE.PointLight( 0xffffff, 1 );
// camera.add( pointLight );

var renderScene  = new THREE.RenderPass( scene, camera );
//var renderScene2 = new THREE.RenderPass( scene2, camera );



var bloomPass = new THREE.UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 );
bloomPass.renderToScreen = true;
bloomPass.threshold = params.bloomThreshold;
bloomPass.strength  = params.bloomStrength;
bloomPass.radius    = params.bloomRadius;

composer = new THREE.EffectComposer( renderer );
composer.setSize( window.innerWidth, window.innerHeight );
composer.addPass( renderScene );

composer.addPass( bloomPass );
//composer.addPass( renderScene2 );


//objects
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.x += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.x += 5
cube.position.y += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.y += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0x0000ff } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
scene.add( cube );
objects.push(cube)

// cube thats supposed to be not bloomy 
var material = new THREE.MeshBasicMaterial( { color: 0xffffff } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.y += 2.5
cube.position.x += 2.5
scene.add( cube );
objects.push(cube)

var gui = new dat.GUI();

gui.add( params, 'exposure', 0.1, 2 ).onChange( function ( value ) {

  renderer.toneMappingExposure = Math.pow( value, 4.0 );

} );

gui.add( params, 'bloomThreshold', 0.0, 1.0 ).onChange( function ( value ) {

  bloomPass.threshold = Number( value );

} );

gui.add( params, 'bloomStrength', 0.0, 3.0 ).onChange( function ( value ) {

  bloomPass.strength = Number( value );

} );

gui.add( params, 'bloomRadius', 0.0, 1.0 ).step( 0.01 ).onChange( function ( value ) {

  bloomPass.radius = Number( value );

} );

window.onresize = function () {

  var width = window.innerWidth;
  var height = window.innerHeight;

  camera.aspect = width / height;
  camera.updateProjectionMatrix();

  renderer.setSize( width, height );
  composer.setSize( width, height );

};


function animate() {

  requestAnimationFrame( animate );

  objects.forEach(function(obj){
    obj.rotation.z += obj.vrz;
  });

  stats.update();
  composer.render();

}
animate();

而且,如果我尝试创建它,我会得到

CREATE TABLE test
(
    created timestamp without time zone NOT NULL,
    tx bigint NOT NULL unique

) PARTITION BY RANGE (created);

CREATE TABLE test_part PARTITION OF test
    FOR VALUES FROM ('2017-01-01') TO ('2017-02-01');

但是,我想做的是在tx上创建唯一键,而不是在tx + created上创建唯一键。

如果我创建了一个唯一密钥(tx,已创建),那么它是有效的,而对于我来说不是这样

DETAIL:  UNIQUE constraint on table "test" lacks column "created" which is part of the partition key.

如何创建不包含分区键的唯一索引?

在那种情况下,我想存储所有基于created分区的数据,但是txid应该自己唯一。

0 个答案:

没有答案