Merken

Hacking PostgreSQL

Zitierlink des Filmsegments
Embed Code

Automatisierte Medienanalyse

Beta
Erkannte Entitäten
Sprachtranskript
order in me or are we don't need them like so I get too loud yell at home and and how I am so this talk is about hacking those and this is getting more focused on the actual back and sort of such things that you probably wouldn't be messing with a few words of writing an extension of something along those lines but and this is actually based loosely on a patch that I rode up and then was subsequently rejected for very obvious reasons that get the top and so unfortunately what here is not actually committed I still have some hope that maybe 1 day will be I will see that at at at an ally there some folks over here know what it is that are very interested in having it so I still think it's worthwhile but but that's another discussion on it and when my
arms about was the major contributor of and work with the project for quite a number of years now and I wanted the rule system in 8 . 3 I an income will produce an 8 . 4 a done but the contributions in other areas of the OBD-SQL 111 messing with more recently I that did for each and with smaller folks helping but only get 1 also contributed post I'm I can't work for a company called resonate we are all but no higher in particular not so much data is talk for really confer operations that books if you wanna work in the northern area investigatory work and you want you operations Linux to do those growers Big Data self you know the more you know that jobs that resonated of it so I had decided that this in there
because the person I
spoke this slide management 5 writing system from added in his slides so I figured maybe you'd like me to include in mind as well as happen they magnets that you should already planet that was your lowered because it is pretty cool it good stuff available there right so that's
jumpin right at the very top level both the source tree easier Europe you know the directories it actually kind of matter right so you've got your contribute module you've got documentation on and any metaphorical right where I the source code directory and in the back and the actual poster back in itself that's where we're mostly focus because this talk is about hacking back and on but want from the other pieces right on in here you've also got band which is where the definition of all code is for PC dumped PST well those kind of utilities and even surprise you if you don't have to modify those as much as you might think but there are cases where you make sure you're adding did you don't support for example or maybe you do something cool and need to change the SQL the bottom new columns and catalog they believe that at the common code this is actually relatively new we're starting to have some set of code that's actually kind of both the back and the front and go but there's not a lot there right now but that's actually interesting project if people wanna look at it because there are cases where we probably could move more into their and include directory is actually massively important but the 1 that even more important than the other 1 I will get to that later on and interfaces directory of with the NDCG but would be to follow the 1 that's more interesting I don't know exactly the CPT OK well that's going home at at at at that no 1 that's great I write it on the back-end somebody has in the past that so we have everything people in you know it's about our our our and of the PL directory for all of our procedural languages are so if you want to look at the OBD-SQL or he'll take all or appeal Pearl that's where you would define how those are all written and what they do and how they work and how they interact with the bat and and we also have a lot of platform with the pick up on acts and we have some garbage tools beauty and refine point your own garbage but home has that that that it would turn your food to start a half an hour I so
components of the back-end right this isn't all of them OK this is just kind of most of the big ones I'm not going to get an opportunity all of these this talk simply not sufficient for that I could give probably all day tutorial about if we try to go through all of it but I want to try it on all the different pieces that you kind of know where a lot right and so on and try to go through the use of the product to take too long because I know a big 1 of the worst at least half of you I think probably already seen this list well has looked through the source tree before we can occur for this some folks in his new elements in are so the access and axis is where you we define how we do things like talked indexes right these are all your access method for on different as a data the you just engine indexes B-tree indexes the effects of methods are all defined under access you probably don't need to play with this too much right the catalog this is where all those things that are in PG underscore catalog this is kind of how they're built right we have inside of the catalog directory are set of C structures essentially right and we kind of make them into magic catalog actual tables that's kind of really interesting how that whole process works in this change a little bit over time but the general idea is that if you need to go add some new catalog and maybe 1 adding column 2 PG class for example this is where you would go to do that you go and you added that there you go update all of the and data so we actually have a whole want to see data in some of these catalogs that is kind of the guts to get the system going enough to actually work and run right so but that's where all the actual catalog tables are defined on what's really can interesting about how we do this now is the time with Pt upgrade so upgradings of the part of how we do you know those growth rate we actually support binary in-place upgrade now but we don't upgrade in place catalog so that allows us to be able to go from 9 1 9 2 what we do this we don't the catalog out and have a logical definition of it and then reimported back into the new postmaster trying and a new major version so it is possible that add columns in here and what not they won't break things during an upgrade to really work on the commands directory this what I find myself in a fair bit actually so this is where a lot of your utility commands are defined and things like the copy statement if you wanna marking with copy which we will talk about a little later this is where you would go to modify and the actual code behind what copy done other things in there is to create table statements are in their back and then there this is where a lot of those commands you would actually run are are defined in the secret side of it now they go through a lot of gyrations before they actually reach this code right because the other part of the kernel talk about man but if you want to look at the that's actually run when you write that when you take that comment on the command line this is it the executer all boy excuses told they agree with the executer works that you actually get into this story of what to go to the next year essentially what a trained as a market Friday doing more about that the executed could be a talking in of itself foreign is where do for new rabbits so we now have responded wrapper finally in amphibian 9 3 but if you want to see how that works in all the different variations what there if you want us understand how foreign data records work revolves file as the W in there so that's where I would probably recommend starting with this a lot simpler work with is it also OK that there is a part of the biggest contributor not under 1 really fast because the foreign and in the back and this is going to be the entire talk on beginning corrected just FYI @ @ @ @ @ @ which is perfectly right so the foreign sorry for where we define how you how like a file w was written against this I found that the post presented is an area where tau is the structure for how we if you wanna go modify something about how creates foreign wrapper works for great table works that's where these near getting ahead of myself or the liver where does not National Library OK in the back in directory Bolivia's just kind of utility general-purpose missed functions we also have a U utility rectory it's that part of it don't know there's really clear what goes in which place to be honest with you for my 2 cents and there's a little bigger directory this is not the PQ gets link and this is the back end interface on the back side to would be q in some ways it's kind of the the protocol definition for interfacing back with the p q right on made is making hundred nodes OK so you understand what nodes are OK I got some of you I know do and so the way post works about knows a little later but basically it builds trees of these nodes it's all in memory data structures right now no nodes themselves never get written out to disk but it's on a tree structure that allows us to say OK what kind of a node is on the optimizer it this is where all your costing stuff comes from right so if you do explain right so rules and slammed across for I think you are right so if you want explain cost numbers back right that's coming out of the optimizer you don't actually see everything the optimizer sees right what happens is that the plan on the optimizer work together to come up with what they think the best plan is in effort the were turn right and then you'll still costing numbers at each of the individual notes so in that explain are the different nodes right there pulled out and written nicely and what not and have appropriate information for each 1 but all of that is kind of this are joint work between the the optimizer in the nodes infrastructure the parser would in the pasture a bunch in a bit but this is where we do blessed to analysis and the actual parsing on of the of every command comes in through both from our our borders just back into the court things the postmaster both masses that mean processor can answers everything that comes on the right is the guy who answers it force of a back and and does all that kind of work Annals of 14 off the background workers that also runs the postmaster handles all of that and that's what that directory all about the red X is actually on and we spent a frantic library on was also used by the goal but to be honest with you I think were becoming the factor maintainers of it on my doping the table folks of the the great novel but I feel like were pushing more blogs to them than the other way around more bugfix inflation and not lot but still a replication is where we deal with all the replication changes things like wall shipping on the like that as well as the components to read them back in after doing I cannot them by the rewrite engine and it whenever you define a of you you get a rule actually is defined for the basically takes any queries there to be won against that view and turns around user wrote user rule reconstruct them that's what the rules directory is all about and it really directories about managing all those rules and how we do all that Snowball stemming from you know it's about full-text search of the storage layer is what actually handles direct file I O so we don't we actually have this kind of abstract layer on there was always this notion way back when that we would actually have multiple portable storage options that never really panned out this way too much their endowment that happen I think maybe someday but that's what the that's where it goes dealing with actual fire level file access care what directory what file the go Open managing file descriptors that kind of held by the storage and infrastructure but traffic cop that account is where the queries come in on the net commercial them through the whole process of planning a query executing query running results for all that stuff there t search is the general and full-text search component and then details just again kind of random back and useful functions of all that on a couple of them in a bit right
you have an idea for something you wanna write you have some new cool thing you wanna do where would you begin right of a this is my personal preference in general is to start with the parts right but I wanna go add some new cool thing generally go open up grand ally and say what might what I need in here to do this on all idea there being that at is from my perspective what you understand how it is gonna work grammatically so it actually drive some of the way that it actually has to be implemented right you have to be able have people be articulate to you in terms of the back and what you want done right now is actually a pretty challenging thing to get right a the time as the sequel command if you're not for but it's also something is really hard to get agreement on a lot of times and then the TV isn't that hard but in general I would say you want to start with the definition of what you want to do and that really does start with the grammar a lot of the time or the semantics or however you want you know articulate that the whole point being that immediate agreement about that upfront ideally at least on initial way to proceed now you get into the code discovery can make it work that way what areas to rework it that happened but that's where I would tend to start from the grammars define an inner city back in parts we have a lecture that have all the tokenization of all of the different and things that come in on it from queries took out by the lecture 1st before they get passed and the actual grammar itself which is in Grand not why but I don't think you tend have to change lecture I don't think I ever had to change it myself so probably don't need to worry about it at all but the lectures built with flex the grammar cells built by and on it's pretty epical if you've ever written out in a C compiler or something in school or whatever or any kind compiler like that you would recognize that it's very much just the way
you have some kind of very hot
modifying the grammar so I don't know all here knows a lot about grammar only give a really quick introduction there how this stuff works right so grammar is the set of productions OK you have a stable level at the the top level of kind of main if you will in the grammar right and then what that does is that a list of all words phrases familiar with red x's just like
this or this or this or this right at all it's OK and so you actually there's 1 really big production bold statement in the grammar that lists all the top level command can be seen right you want at and that where you go to go add your new production and and if you want to modify something existing like a copy statement you would not have to modify the statement well 1 all you will find that copy statement production modify it this is the actual 1 that pulled out of my whatever version of it the after of them looking at this is the copy statement for copy right what you'll see in here is copy is actually a independent token OK you'll see that in the in the 1 keywords lists right it's adding and that's why all capitalize 1 the can point that out because there's a lot is required is certainly something we notionally do is actually have things on capitalize it our actual tokens and and other things like of binary this is actually another production if look up what that production means you're looking you know another part of the grammar or wherever of binary defined now all these top-level commands in the actual file themselves they can all stick together they don't have to but it's usually a lot easier to understand how it works when everything's together that goes together and so if you are modifying things in here you might keep to that as well something like qualified Name off column lists those are things that are going to be defined it in and toward the end of file as I recall and they have and this allotted different things using very generalized very useful right so that's all copies statement and then what you have underneath that production when that production finally rolled back up and matches what you and I have here is a bit of C code of K underneath of it it's kind of like a template Seiko the right is what happened is spices going to take that block of C code went through a template is go pick out things like dollar 3 which doesn't make any sense and and replace it with the actual 3rd position token it's coming back from the other production right and so here you can see relation that coming out of qualified name them OK so that's really quick how you work with bison writing grammar home right so if we want
actually go modified copies statement right so you need to modify the C template code based on what you do you add whatever your new thing using the copy production also different this in a minute and then again I don't the secret affected by and 1 for the templating changes over a dollar 3 is compiled as part of the overall grammar right that you want to see the resulting C-code after you run bison is a grand . se you will look at you find where copy state is in there and you can see the actual C code they gives generated for copies they are in terms of the actual into the passing of that copies statement and you do a couple of other places union retrieval update on and things like keyword lists and if you add if you need to add a new keywords and you want to try and general then add things in unreserved words you don't want to create new top-level keywords that a lot of discussion on in because it truly a reserved keyword then you know if you wanted if some users creating a table with that name that's gonna be potentially break for them unless they're using double quotes around it which most people don't but that's the point right if you actually make a whole new Q of fully keyword yes and he did not I think actually maybe did not well and then we have to have a good not a separate definition of keywords and the double going to use the same set so yeah that is so you at if you update and here's a reserved keyword the PG don't that's compiled against his version will automatically realize it's now a reserved word will quote it when the dumping against an older data or because intuitive that 1 reasons why you always wanna run PG done like it from the newer version of post Preaeren really from whatever words in the you 1 eventually loaded into because that person will know what all of the reserved keywords are for you know that was that was in the loading it into
our so here is of a bit of a differ gram not what I might have cleaned it up a little bit what not by hand so 1 of the good actually apply but yeah the top adding in compressed it that year right but those committees and stresses the committed concurrently OK you add to the top as a new on has a new token type right that's that is the new token diet and then here I can now say OK this new token type is being added into the or set for the opt option for the copy off right so in the prior definition of the copy statement you saw in that production a reference to copy right that then goes to a whole slew of or statements along with the little magical 1 at the bottom that allows them to be appended to have more than 1 essentially on on it but this is what it does great I had compressed and here I am I right by a little bit of C code dollar dollar inside of this you thought of 3 referred to you know the result of this production Bollegala is what this or the result of the 3rd production dollar dollars me right is what I'm going to return up right so I refer to myself as dollar dollar the guy above me if I'm in the 3rd position refers to that result our 3 right and here I said OK and make a default element which basically is that maybe it's called make integer so make integer is going to create a note again if we have a whole bunch of different things they create these nodes all all hidden nodes a little bit later on but if you make integer node and then you have made this element is assigned to this and then that node is the path back up again so these are these are all nodes that are getting bills here out of this expression for it in this case and then you add add is compressed to undeserved he worked on because now that I'm using it in here it can't be has to be more than just a word right it can be anything anymore it's on reserve meaning you can still use it for tables and what not but it's still a keyword so using a graph I think all the right
would nobody's really and correctly it on are had that and so what about the actual code right so in copy . si which is inside of SRC back and commands right we have a whole bunch of stuff we have to do but in there there is a function called process copy options which makes it really convenient because that word processors all the options they get passed to it from the grammar like this compressed options had an actual string literal string inside of that that's where will likely see how that is used in copy that minute alright there's also copy state information on so so this is something I wanted to add a little bit if you have the information you have structure and what not you're writing in on the your writing that you need generally if there are only ever use inside of your . si file you don't necessarily die each of them right you just put it at the top of your . file that's acceptable did not every struck have to be defined in some died file somewhere right and that this is 1 of the core things about both Chris that all of the pieces were modular right and they only expose the things that they're supposed to they're supposed to be used by other parts of the code that net modularity is a big reason why both because they have to be built as being as good as often as it is because we keep all these things separate and when you hear hackers complain about layering violations are level violations or whatever it because you're know accessing some part of the code using something that you really should be going through something else to get to right you should be going through the proper channels if you will do it you can just you know go right something up to a file on disk somewhere without going through the storage system for example are so
where the option handling isn't a B . C and when you have the top of the file is a happy state data structure right and add my new Boolean him in here is called compressed erases all it's doing is tracking whether I said that this is going to be a compressed stream coming through the copy or not and then in year instead of process copy options I actually write the new coding here it says what I do when I see that option come through from the path so here understood comparison against death name right as a compressed which is what the partial passes the and underlying this is a literal string could be anything that makes sense to have it and then I'll a bit of a therefore around if I have the
list which is required for this option than I can say OK it's state compressed already set number for Erica you pass it to be twice otherwise only go ahead and say you get the get the Boolean values being passed in the right way is to be true in this case and then I have a little else cause here saying my compiled these lives on the throne error rate that you report error is a way of drawing error and it does a lot clean up for you about a little more about the error structure later but it makes it really easy as it would add a new option copy doesn't do anything he that that that that that that's kind of a problem
right and you have lots of changes need to be made to copy . C for this particular patch I understand a kind of go over the general structure of what I did I'm not gonna go into a prior on the Newton decrement in prominent going to what may be mostly on what I did was so copy as part of the sun the state machine and added new compressed data and I also added a new set of on file handle happy tracked at the track gz
files instead of files are yes Magnus thank you Magnus how how I mentioned up there the upper right please ignore it particularly that Magnus's name on it so you also have used easy reading gz right in order to write to and from this 1 data as it comes in and out when you're done with compressed data you can have to have 2 different buffers you have the buffer of the you know compressed data is coming in and you have uncompressing another buffer you pass that buffer up off to the next guy to do whatever processing passing and I keep all these pointers and think it's a little bit area but it's that I did it up in the world and here's the dust
that from the the resulting pattern on ITC most of the work is in part of it at the hands of the other changes that I had to make the right now we have inside of stories we have this allocate file free file and what those do is they just so they basically are used to cache file descriptors right so each part of the code that the worry about what the file descriptor is for x or wire or whatever right we have this or whether any closes not we had this cache of file-descriptor and the storage system wife ago you know once it's filled up all of our descriptors that it has available to it will expire out old guys and bring new ones in all this magic behind it well that only dealt with regular evolve grip provide added some special ones for allocate file gz in free filed because when you freely you have to go through 0 basically do right and yet but I do that I do regression test updates so that would associate test is where world a regression test suite is and regress on a new but if you add stuff in the input and the nature of the matches with in output and then we run the regression tests generally what we do is we run the input and we compare the results to with the result but the results are essentially a he worked with a beta a documentation copula SGML that kind of it and in terms of what I talked about with regard to my path for copy it would have any questions about that Mr. dumping into and as they gathered talks in a much more general here in different subsystems a work with and here's how you use them and that kind of stuff so graph right so that is why I might have didn't get committed how about that had at at at at at all actually have 1
more slide about this right this is what I is part of why might that didn't get committed because somebody happen to be really having be thinking about the same kind of a problem and wrote something way better so might might take away from this is follow on most closely allied I try to call pretty closely but always what for others were working on similar capabilities right from think about federal answers to problems not about specific ones so for example in this case where you just run a program you can use whatever kind of compression you want whereas you can't necessarily with the person I did however was an interesting little side note about this this will do copy from program but everything that talks to the actual back and has to be uncompressed but against their rights you can see you using get here already do is that obviously capital run on the server side it therefore a process and then it's just a pipe that data back into in the back and actually gets it's actually already be compressed at pilot on a local system like that but when it on the other side of the network right and you actually wanted the data decompress going across the network it's not as ideal so this particular solution doesn't do compressed across the network which minded unless you do something really disgusting like send it to some unique pipe on Unix file system pipe on a remote and with cat you get from that of the it's probably good to start the milling yes and that's kind of what I was getting at originally on is if you have an idea I would suggest writing of a wiki page on initially and then you talk to me I must say this is my idea here's what I how I think it'll work maybe have a little a sketch of what the grammar is but I didn't do that heck
at R right so far across the 2nd half of the talk radio talk about what I would call acting the post-growth way right so both has kind of specific special ways of doing lots of different stuff right we have our own memory management system we have our own error-logging system we have only exist implementation unlocking a growing like the details of all of these but I want kind of hit on them and try to give you guys an idea of where to go look if you wanna go hack back and what are the different if you think about and try to give you an understanding of that stuff that I was doing that others Seiko the call these random functions this is where you don't want to see how the defined how the used right
memory-handling so in both groups we have what are called memory context OK everything that you ever allocate when it comes to memory should be allocated through memory context because it's how we make sure we clean things up when we're done right so the allocated through the Malik which really is how like that we might think it actually there is a pd Malik as well as the amount by the wife of the amount in yeah maybe it's it's a fraud and sorry actually pallide for and so when you're in the back end code palette P a l l right you want to do a whole lot special with that right you just call it and it will happily go allocate memory whatever the current memory context is which probably nights and the time is right again it's not right then you have to think about well should you be switching to that memory context to do whatever you're doing so we have our we have what's called a top memory context this is kind of connection longer back-end long right so if you wanted something in the top memory contact it's going to be there the whole lifetime of the back end OK and so in some cases that makes sense because the really really careful with it because if you have a leak in there so if you have them is operating on a per tuple or per query basis and you're a problems because you'll keep accumulating memory in there because the whole point of the structures that avoid having to remember to free every little thing OK so you have to have a reconnaissance per query context and that you have a per tuple context right so again a lot of these things are kind of an old in the code you're probably looking at commodify already so generally you can just use palette on but if your you know if you're looking at it you are doing something in a in a maybe it's per query context but you have to operate on the individual tools for whatever reason you know and you are looping through all those tuples body problem you're calling functions and you brought I wanna change context to be portable context and then use that instead or a portable content so that it is the other part about this right if you have a code that ends of calling other functions like user-level functions or other things that are outside of your control you really wanna make sure you have his memory context Set correctly because that way they will be allocating their memory in the right context and when you're done with that in that context goes away you all economic it's freed up yes yes
yes that's right yeah yeah here I just I reiterate those those saying if you're innocent returning function you can have a per tuple context be used if you're returning something that's going to go outside of where you're doing your per tuple work right it's going it need to be in a per query context so that when I figures out it doesn't get free when you're function X what it was doing work with any other questions or comments about memory context it seems pretty simple but it's important understand whatever your hat in the back and you have got to use memory contexts things will go really really ugly is actually 1 other point to make here with this is if you're waiting in other utilities like utilities are outside your control or even extension GIS a anything like that you run the risk of bringing in things that do out you know allocations that don't use are memory context the needy very careful with anything like that where you know that allocating memory and give you back some point 3 better retrieved clean up and you have hand like yourself because I can use palace enlarged not necessarily true I mean if you want actually if I understand where you're coming from but also not free to do and if you can get away with it you don't worry about waiting until the end of the context of thrown away because it makes sense that number 2 of so I think the innocent into a product he free everything unintelligible with a thought about that yeah right right yeah yeah at that but I get more the point yet if you are doing lots and lots of allocations that are a longer running on the context or what have you that you can use the free it's not that you can't but you really don't think about it as to whether it's really necessary or whether you know it just cleaned up at the end of that tuple processing in a routine anyway and that's 1 of the big ones as I will add you using phrase unapproachable context probably really overkill on an unnecessary and always cycles of yes yes yes
that's a just reiterate would when using you also have child context and back and everything is a parent child or something right but if you need to do it yourself it's quite acceptable to create your own child context and then 1 with that for a while and then free at the end of if you have some use for that and you know if you're outside of a per query operative will context legally probably like utility commands or something like that where you're not really operating on individual on a set of query context necessarily for all all all right because of the cold outside of the and here you have to clean up yourself all right you have not yet but you have things getting reference and the next year after nature you can add up the ability OK that didn't just to that way but the B-tree ones and not a right that's an interesting point so in general it's good understand the overall code monkeying with and this is in some cases will have different strategies for helping the that as memory on like that for now because they're just operate differently from a B-tree Arnold memory warning from
within the posted back and so what you use to do all report and error coding error message right the error level the error message are required to be passed in that we actually have a style guide for error messages that it is actually inside of our documentation that if you are doing anything creates new error messages you undergoing in reading what the style guide says about how that should be constructed and because it also it actually is really important for things like translation and it makes things a lot easier translators there follows the style guide on and they will yell at home but if its error or higher from inside of when you're doing in the report is 1 of the things that matching earlier it will actually clean up your transactions for you it will clean up your memory context for you and it will handle lot of that so you don't have to worry about you try some go to Andorra or trying to deal with all that yourself you come across a big error like this 1 here I know I I tried to do a gz right again error back from that process I can get a report error and I'm done right in general I don't have to worry about trying to clean things up after that on because it will go handle all the different things I I think about it I don't think I might have evolved at a different number kind of file descriptors of I don't know if I have to really think about that 1 so just to point out there are some things that don't get cleaned up but in general your local state and anything having to do with the per query or per hour per transaction per query these things would go all that kind cleaned up for you because it all actually roll back the transaction for you will do a lot of you know someone don't magic and get you in another area where it will handle that clean so this is how you should be doing your error handling from within the post back on there are you'll see sprinklings of other functions there was actually rewrite on and final how long ago from we had to think it was a lot that the 1 enough with the use anymore just for internal yeah so if there are other components of this there's a whole bunch of documentation about it and where it is all fine yet but here know yet years that that is there that because of that is the actual because that hasn't developers effect on the environment to the management of that's true yeah yeah you have
data going debugging would have a view on the 3 and said and a lot can be useful to right of directly on doesn't go through all the the same structure of the report not complicated used in by catalog lookups
and the labels that we have what's called cash so since catches Canada's back and catch that we have that handles catalog look up it's got an interesting semantics and the you have kind of careful with that 1 is defined in utils cash but insist that that's the the general way in function use you can use useful look things up is called searches gas you pass in some key for some catalog into you want to look up and you'll go and figure it out and return it back to you on there are some convenient for genes it is for you and for specific types of things you might need to pull out those are defined in else's cast at the and so the things that are really complicated don't oppose because is the full and BCC thing snapshots and what not so only hit on that a little bit right so when you're scanning the catalog tables a lot of times you'll accusing was called snapshot now that means that the just basically reading the heat from top to bottom directly by the not doing any filtering on at the NSC every row whether it's dead alive anything OK so you have to be careful of what the semantics are around using that you don't want just copy that blindly because you really need to think about what you're doing so snapshot now is very very tricky you used on some of the cases you can run into it that are cases where you'll see the same entry twice by you might have a unique index on that but doesn't matter right because we posters doesn't update is that it does in inserted deleted right and what you're scanning through that you might see the tuple that define some table definitions and then somebody goes and drops that table it's marked as deleted in NBG class and then they create a new 1 and what do will happen is that added the end right and then as you continue to scan through you come across again right so those are cases you have to handle this new and more fun 1 handle which is that you might not see that entry at all OK because what can happen is as your scanning through the gets deleted off the end in inserted behind you are right now all of a sudden that becomes longer whatever clean that page up it's gone you'll see at all so when area using snapshots now semantic you have to be careful around this kind of stuff but there are others that just to use on a new speaker look and see which ones are the right ones to use for whatever specific thing that you're working on and but it it it really needs to be thought through really carefully I think that was mentioned in the talk here also each individual query gets a snapshot right it's not like these are standard distinct from transactions and we cover that 1 each of you understand they're not the same thing right on during Kevin stock did a real good job of this but basically transactions can have multiple stepped out if you're in like recommitted noted you'll get a new snapshot every time a new query comes around here see whatever has been recently committed so just be aware that different semantics questions catalog of I know it's it's very very broad and so I have something so much I can governing the heart but this cat is really useful if you go look at you know example code that's out there and help a lot on in terms of understanding how to use it and what parameters in the past 2 and what not and again the helper functions are really useful also for looking up very specific things that you need to find out of
the got notes right so the other nodes structure of expression trees so this is again another the node structure is is completely in memory each node has a type assigned to it as public type in a blob inside the structure on what that allows you to do those do what's called is like is a and you can say tell me what this is and you'll be able to figure out what kind of a node is and deal with it appropriately at a sample of the executer right executed happily going along executing whenever it needs to it needs to have an idea of OK what his next node coming up and I need to go execute you can do is a testing on figure that out and with the rankings are they allow that nodes do its job wikis bundle can what happened right away you create new nodes in the back end using make note of that there are helper functions around that like make integer right so that earlier in my grandma right had make integer that actually just a wrapper are fully macro around make note that makes and makes 1 set as an integer that type of node and it passes that back if you want to go add your own notes type which can happen in a few cases then you go into include nodes nodes that h is where you would define your new node take on and then when you have a new node that was goodies understand how to deal with making that node copying and known around whether it's equal to some other node as all these helper functions that exist inside of back end nodes you make sure you've got all those functions written out for you on you know the erotic and the way that the nanopatches basically it's it's really easy to say OK I want know that looks like this but a little different from the copy that went on in terms of the name of it is the name of it and go grab for wherever it is used in in the back end nodes and make sure that I have functions and match up for whatever that was and there's also like copy has to do with deep copyright options striving to function the 1 for deep copy 1 for not being happy brought him but the point is is that you will have to do D copies you assured where you have to be copied you're actually doing indeed copying you're creating a whole new nodes it's independent old 1 and in the event that you have capacity is yes yes typically news and at 1 of the really great things about both this is that we have macros for us not to start on all over the code and it's very convenient to be able to use those macros rather than writing your own stuff and it makes a lot cleaner read to make a lot more sense they don't know what
those data are not nodes nodes not didn't right it the actual data OK they're they're not party expression free all the actual data out there that the structure for a data is defined both the that age and whole time helper macros in there as well and and so you want to be fair to use the lightest listed a couple here in 30 to get data right what that does that create build a data of an interview you passed and rights and now you have some piece of data that is an integer that you haven't seen as an integer you did make idiomatic in the past so stored in the table somewhere have you you been using 30 to get here and then and you have the reverse is data and get in 32 which is if you haven't a data that isn't 32 you can pass it into this and return the actual encounter yes you could do it yourself to but don't right there's reason why these macros exists and you want be using these macros an example retains the do that kind of work and so 1 of the big things is when you're writing code if you're not using the kind help outward you're trying to access data structures underneath the things again layering violations they don't do that evil on and you will get your patch kicked to the curb produce testing and things like that this is really really general that data very but with the jet with the actual structure that is essentially the data and type in the new data on the question of tuples fold even more
fun so the tuple is defined in include access he it's 2 . 8 on the include directory is not doesn't exactly follow the answer C back and directory structures but in some cases they do this is 1 of those cases so the access methods for heap which involve the tuples it does really correlate directly to the US at the back and access where all the methods are defined for it on the tuple data structure itself is just an in-memory contacts construct rather is not what actually written out to disk but all it does is provide the length of the tuple and then give you you a pointer to the tuple had the right then you have a tuple header and that inedible Blatter then followed by the actual data right the tuples using multiple different ways to the point that there could be a pointer to a disk buffer quite out shared buffers if that's the case in your mind with the better make sure at hand because it's not the end what can happen is postprocessor clerkly Balram was goes through and once that it's gone through those shared buffer catalog enough time it'll go wait a minute this guy so all he hasn't been used recently on victim and but something else there so wherever your language of blocks a or discovered in the 1st year pending I'm not part but that you know that he had anything other than the interesting and it can be a single penality chunk of memory or could be independently allocated on and there's also something of a memory tuple structure so er minimal finite-memory minimal tuple structure so in the middle tuple structure what we do is just throw away so extraneous column so we don't need for whatever we're currently doing doing what this is used instead of the he II and hashing over at the we don't really need to have all your the max x max mal that stuff doesn't need to be there necessarily inside of the hashing code itself right by the time we get there were only seeing something valid for us anyway write something somebody else lower down handling at this sequential and what have you and so what we do is we drop that out but there's no way to distinguish a minimal tuple with doesn't have those columns from 1 the dots so you really don't know what you're doing what kind of a tuple you're getting an act appropriately with questions about tuples are here the more
I I think I have already but you you all had a data on inference is but it's 2 . 1 for detailed but which has additional details about I had tuple or intervals and includes a number of active users and whenever we have a tuple we actually have a bit bit-mapped on some other flag to go along with that they tell us like where all the nodes are in it but store Knowles like in line anywhere right it's just of bit map at the beginning of the tuple that says you know these positions have no value we arrive at the store them and the data from all of the areas that would explicitly instructed which apparently we've had some fun stuff with what we do this all over the place so just get hit on something
we use a lot of places where will have a structure like a header of some kind or what have you and then will have the actual data following immediately after that you are almost never supposed to go access that data directly by doing some kind of offset right there will be macros defined if you do it yourself you should be providing macros for people used to go get that information and you should never be doing point all sets up directly through but to get that data that is after the end of that structure for 1 they have portability risks because you have to know what the actual distances on because things have to be offset certain ways on if you're actually using memory otherwise you get a signal but exceptions of garbage on the 1 they should use the macros that are available for dealing with any kind of constructs like that but is something that we do a lot of this reality structure in data following that structure actually in memory until we could allocate reallocate the structure plus whatever amount of data we need to have go after posting who near the coast it's RIA as tell Mali's happened you're still waiting a I had spent at at at at at so what happened with toast on large valuable get toasted only stored out of line and they can get you know they can't on disk representation we have an actual separate table often cycle at those stable right will do little take that tuple and take that that data electable stick it over in this post table is that a pointer to and from the maintenance right and surrounding Boeing from questioning of closed but you need to be careful about it when you're dealing with data in the back right because the data and you get handed could be toasted may not have been details right in that we try only be both stuff when we absolutely need to try hold off on doing that because it's expensive you know if we have the details may have to go back out and get the actual those value often bears we may have to decompress it because what we the present itself on this because any time we tell something we compress 1st so you have to be careful about whether the data you're working with is actual values where there's been posted or compressed or what have you fill the do they have to be aware of and because it is 1 of the things we do in the back and all over the place and if you're playing with was 1 of the things that happened in the back and all over the place that the decoded deal that is actually pretty well Iceland of but still some you have to deal with when you're working with the questions that were not under the clarify you can actually heavily compressed before goes into the QoS table if we compress it gets smaller fit on the page and then after it's been compressed will keep that in mind we won't have to put it hosted here that's another caveat that are are
almost none folks from other subsystems others other been done please don't go to write your own linked-list implementation and try to estimate both present day unless you're who is under its UN road the internal and with 1 and yet generalize could if you do right some new generalized thing you put in 1 the generalized areas don't write something that's very generalizing can be used by other stuff and stick it in your 1 little area and is typically the 1 use across other things and look at the existing code real examples help enormously and a lot of times you'll see when you need it also give indication have you with portability concerns on like if you wanna write something the users like a select loop go look at how we do that in other places because guess what on Windows it's different so you get a careful whatever that kind of stuff you use the post select an coding style
allowed that they had on the inevitable writing make sure your code fits in right don't have your code look completely different molecules around it it's very jarring for people who were trying to do reviews were trying to read the code 2 months later you know anything like that you wear of copy based on follow the style guide in the fact comments answer really really really really big deal in both from R code is actually commented we wanna keep it that way if you find ways rethink it could be better please submit a patch whenever a complaint about new patterns that add more documentation backend always use the cell comments we don't do steepest also comments on generally we have count on their own lines in their own blocks the standard because of that a little bit I'm also I wanna get on you always want to explain why you're doing something or why this makes sense a wise is necessary don't just try to write a comment saying what the code does we can read the code with a standard you know we're getting the fit value out of this this are the the question is why are we doing and why is that the right value and all that kind of stuff but if you have a large code block that goes for functions like every function should have a decent size common what about it but even for big things like large while loop large if our other conditionals you wanna make sure you have a good sized block above of a common explaining what it does and why does the idea the mini
batches and you wanna use context on war against them I guess is that nowadays but an ideal world you would pick which 1 make sure they have actually more readable if someone wanted to read it and I think in general we prefer context there because they typically are more readable on because they don't mix things but it is also and make in your e-mail the hackers you include a description of what your patch is why it's doing what it's doing and why it's useful to you make sure you have regression test documentation updates and PD don't support it that something that you're doing and then registered and that that that was 0 here the big deal but how poker you explain people why that matters for you right but they had that the main point there was that this is David fatter if you don't know is I don't post of Wikinews so yeah I would definitely help if you have a 1 liner with your description but also about bigger description and a lot of policy and hit patterns that one-line descriptions in it that all 1 liner and then a real paragraph explaining
thank you and questions now
Hypermedia
Patch <Software>
Gewicht <Mathematik>
Wort <Informatik>
Ordnung <Mathematik>
Maßerweiterung
Quick-Sort
Computeranimation
Nichtlinearer Operator
Hauptideal
Prozess <Physik>
Zahlenbereich
Schlussregel
Übergang
Physikalisches System
Resonanz
Computeranimation
Datenhaltung
Flächeninhalt
Lesen <Datenverarbeitung>
Projektive Ebene
Bitrate
Schnittstelle
Server
Punkt
Mereologie
Online-Katalog
Extrempunkt
Systemplattform
Code
Computeranimation
Übergang
Open Source
Datenmanagement
Gruppe <Mathematik>
Minimum
Hacker
Inklusion <Mathematik>
Softwareentwickler
Softwarewerkzeug
Quellcode
Physikalisches System
Fokalpunkt
Algorithmische Programmiersprache
Kreisbogen
Netzwerktopologie
Rechenschieber
Datenstruktur
Menge
Rechter Winkel
Lesen <Datenverarbeitung>
Projektive Ebene
Verzeichnisdienst
Retrievalsprache
Compiler
Gewichtete Summe
Formale Grammatik
Parser
Extrempunkt
Computeranimation
Formale Semantik
Netzwerktopologie
Verweildauer
Datenreplikation
Kontrollstruktur
Dateiverwaltung
Schnittstelle
Metropolitan area network
Schreiben <Datenverarbeitung>
Befehl <Informatik>
Sichtenkonzept
URN
Datenlogger
Rohdaten
Ruhmasse
CAM
Biprodukt
Bitrate
Forcing
Rechter Winkel
Einheit <Mathematik>
Festspeicher
Tabelle <Informatik>
Software Engineering
Subtraktion
Große Vereinheitlichung
Mathematisierung
Klasse <Mathematik>
Automatische Handlungsplanung
Online-Katalog
Wrapper <Programmierung>
Knotenmenge
Perspektive
Programmbibliothek
Datenstruktur
Analysis
Formale Grammatik
Tabelle <Informatik>
Soundverarbeitung
Protokoll <Datenverarbeitungssystem>
Softwarewerkzeug
Schlussregel
Elektronische Publikation
Binder <Informatik>
Parser
Kreisbogen
Portscanner
Offene Menge
Personal Area Network
Resultante
Chipkarte
TVD-Verfahren
Bit
Prozess <Physik>
Punkt
Web log
Minimierung
Versionsverwaltung
Kartesische Koordinaten
Fortsetzung <Mathematik>
Element <Mathematik>
Kernel <Informatik>
Übergang
Eins
Metropolitan area network
Primzahlzwillinge
Mehragentensystem
Randomisierung
Weitverkehrsnetz
Große Vereinheitlichung
SCSI
Lineares Funktional
Abstraktionsebene
Abfrage
Vorzeichen <Mathematik>
Quellcode
Teilbarkeit
Gesetz <Physik>
Konfiguration <Informatik>
Softwarewartung
Datenstruktur
Automatische Indexierung
Information
Verzeichnisdienst
Zahlenbereich
Zellularer Automat
Term
Code
Multiplikation
Bewegungsunschärfe
Mini-Disc
Front-End <Software>
Wrapper <Programmierung>
Zusammenhängender Graph
Eins
Speicher <Informatik>
Gravitationsgesetz
Mobiles Endgerät
Gammafunktion
Zusammenhängender Graph
Mailing-Liste
Token-Ring
Physikalisches System
Schlussregel
Flächeninhalt
Mereologie
Analogieschluss
HMS <Fertigung>
Bitrate
Bit
Ortsoperator
Formale Grammatik
Versionsverwaltung
Parser
Binärcode
Code
Computeranimation
Übergang
Mailing-Liste
Statistische Analyse
Drei
Airy-Funktion
Gammafunktion
Formale Grammatik
Befehl <Informatik>
URN
Template
Relativitätstheorie
Token-Ring
Mailing-Liste
p-Block
Biprodukt
Elektronische Publikation
Portscanner
Menge
Rechter Winkel
Mereologie
Mehrrechnersystem
Wort <Informatik>
Bitrate
Information Retrieval
Resultante
Bit
Subtraktion
Konfiguration <Informatik>
Mereologie
Punkt
Ortsoperator
Wort <Informatik>
Mathematisierung
Versionsverwaltung
Formale Grammatik
Parser
Element <Mathematik>
Term
Code
Computeranimation
Metropolitan area network
Mailing-Liste
Arithmetischer Ausdruck
Knotenmenge
Code
Minimum
Datentyp
Mapping <Computergraphik>
Kontrollstruktur
Addition
Drei
Default
Trennungsaxiom
Befehl <Informatik>
Graph
Template
Token-Ring
Mailing-Liste
Biprodukt
Konfiguration <Informatik>
Arithmetisches Mittel
Einheit <Mathematik>
Ganze Zahl
Rechter Winkel
Mereologie
Wort <Informatik>
Bitrate
Innerer Punkt
Message-Passing
Aggregatzustand
Tabelle <Informatik>
Stellenring
Bit
Konfiguration <Informatik>
Prozess <Physik>
Gewichtete Summe
Formale Grammatik
Schreiben <Datenverarbeitung>
Benutzerfreundlichkeit
Aggregatzustand
Information
Obere Schranke
Code
Computeranimation
Methodenbank
Streaming <Kommunikationstechnik>
Gewicht <Mathematik>
Nichtlineares Zuordnungsproblem
Code
Mini-Disc
Speicher <Informatik>
Hacker
Datenstruktur
Inklusion <Mathematik>
Trennungsaxiom
Binärcode
Lineares Funktional
Prozess <Informatik>
Quellencodierung
Paarvergleich
Physikalisches System
Gleitendes Mittel
Elektronische Publikation
Konfiguration <Informatik>
Emulation
Datenstruktur
Funktion <Mathematik>
Rechter Winkel
Mereologie
Codierung
Speicherabzug
Boolesche Algebra
Information
Textverarbeitung
Zeichenkette
Aggregatzustand
Dualitätstheorie
Konfiguration <Informatik>
Zustandsmaschine
Mathematisierung
Gewichtete Summe
Zahlenbereich
Aggregatzustand
Computeranimation
Metropolitan area network
Weg <Topologie>
Rechter Winkel
Flächeninhalt
Datenstruktur
Objektverfolgung
Fehlermeldung
URN
Physikalischer Effekt
Quellencodierung
Mailing-Liste
Elektronische Publikation
Bitrate
Konfiguration <Informatik>
Verband <Mathematik>
Patch <Software>
Puffer <Netzplantechnik>
Menge
Emulation
Mereologie
Bitrate
Fehlermeldung
Aggregatzustand
Betriebsmittelverwaltung
Resultante
Bit
Prozess <Physik>
Freeware
Natürliche Zahl
Parser
Aggregatzustand
Computeranimation
Eins
Metropolitan area network
Softwaretest
Rechter Winkel
Lineare Regression
Mustersprache
Funktion <Mathematik>
Softwaretest
Suite <Programmpaket>
Objektverfolgung
URN
Netzwerkbetriebssystem
Ein-Ausgabe
Funktion <Mathematik>
Einheit <Mathematik>
Rechter Winkel
Ordnung <Mathematik>
Message-Passing
Lesen <Datenverarbeitung>
Mathematisierung
Regulärer Ausdruck
Term
Code
Unendlichkeit
Puffer <Netzplantechnik>
Open Source
Speicher <Informatik>
Zeiger <Informatik>
Lineare Regression
Elektronische Publikation
Graph
Matching <Graphentheorie>
Betafunktion
Kopula <Mathematik>
Physikalisches System
Elektronische Publikation
Kreisbogen
Puffer <Netzplantechnik>
Flächeninhalt
Caching
Mereologie
SGML
Bitrate
Subtraktion
Prozess <Physik>
Hecke-Operator
Wellenlehre
Gewichtete Summe
Formale Grammatik
Datenmanagement
Schreiben <Datenverarbeitung>
Implementierung
Computerunterstützte Übersetzung
Patch <Software>
Resonanz
Computeranimation
Eins
Metropolitan area network
Mailing-Liste
Online-Katalog
Code
Dateiverwaltung
Optimierung
Quellencodierung
Hacker
Programm
Umwandlungsenthalpie
Lineares Funktional
Fehlermeldung
Elektronische Publikation
Datennetz
Eindeutigkeit
Systemaufruf
Physikalisches System
Wiki
Knotenmenge
Rechenschieber
Rechter Winkel
Mereologie
Hochvakuum
Server
Speicherverwaltung
Computerunterstützte Übersetzung
Bitrate
Speicherverwaltung
Betriebsmittelverwaltung
Mereologie
Prozess <Physik>
Punkt
Mathematisierung
n-Tupel
Gruppenkeim
Zahlenbereich
ROM <Informatik>
Kontextbezogenes System
Code
Computeranimation
Eins
Leck
Front-End <Software>
Zusammenhängender Graph
Maßerweiterung
Datenstruktur
Betriebsmittelverwaltung
Demo <Programm>
Lineares Funktional
Softwarewerkzeug
Abfrage
Strömungsrichtung
Biprodukt
Kontextbezogenes System
Tupel
Menge
Rechter Winkel
Festspeicher
Mereologie
Basisvektor
Dreiecksfreier Graph
Gamecontroller
Bitrate
Punkt
Prozess <Physik>
Mereologie
Natürliche Zahl
Computeranimation
Eins
Übergang
Axiom
Metropolitan area network
Datenmanagement
Translation <Mathematik>
Elektronischer Programmführer
Gleitendes Mittel
Schreiben <Datenverarbeitung>
Nichtlinearer Operator
Lineares Funktional
URN
Elektronischer Programmführer
Stellenring
Abfrage
Übergang
Kontextbezogenes System
Transaktionsverwaltung
Tupel
Menge
Einheit <Mathematik>
Rechter Winkel
Festspeicher
Login
Strategisches Spiel
Programmierumgebung
Aggregatzustand
Fehlermeldung
Subtraktion
Zahlenbereich
ROM <Informatik>
Code
Kontextbezogenes System
Message-Passing
Vererbungshierarchie
Zusammenhängender Graph
Softwareentwickler
Transaktionsverwaltung
Demo <Programm>
Soundverarbeitung
Fehlererkennungscode
Fehlermeldung
Softwarewerkzeug
Elektronische Publikation
Flächeninhalt
Mehrrechnersystem
Bitrate
Verkehrsinformation
Formale Semantik
Subtraktion
Bit
Prozess <Physik>
Klasse <Mathematik>
n-Tupel
Online-Katalog
Extrempunkt
ROM <Informatik>
Term
Code
Computeranimation
Eins
Formale Semantik
Homepage
Message-Passing
Datensatz
Online-Katalog
Datentyp
Datenstruktur
Transaktionsverwaltung
Tabelle <Informatik>
Umwandlungsenthalpie
Koroutine
Lineares Funktional
Parametersystem
Fehlermeldung
URN
Sichtenkonzept
Elektronischer Programmführer
Logarithmus
Softwarewerkzeug
Abfrage
Übergang
Portscanner
Transaktionsverwaltung
Funktion <Mathematik>
Flächeninhalt
Einheit <Mathematik>
Automatische Indexierung
Rechter Winkel
Login
Computerunterstützte Übersetzung
Bitrate
Schlüsselverwaltung
Verkehrsinformation
Speicherverwaltung
Tabelle <Informatik>
Punkt
Prozess <Physik>
n-Tupel
Regulärer Ausdruck
ROM <Informatik>
Term
Code
Computeranimation
Arithmetischer Ausdruck
Knotenmenge
Softwaretest
Rangstatistik
Reverse Engineering
Typentheorie
Front-End <Software>
Datentyp
Wrapper <Programmierung>
Stichprobenumfang
Datenstruktur
Figurierte Zahl
Hilfesystem
Softwaretest
Lineares Funktional
Datentyp
Syntaxbaum
Speicher <Informatik>
Kanalkapazität
Knotenmenge
Ereignishorizont
Konfiguration <Informatik>
Patch <Software>
Datenstruktur
Ganze Zahl
Rechter Winkel
Festspeicher
ATM
Makrobefehl
ICC-Gruppe
Mini-Disc
Makrobefehl
Innerer Punkt
Faserbündel
Tabelle <Informatik>
Lesen <Datenverarbeitung>
Bit
Punkt
Inferenz <Künstliche Intelligenz>
Ortsoperator
Extrempunkt
Formale Sprache
n-Tupel
Zahlenbereich
Online-Katalog
Dicke
E-Mail
Extrempunkt
Code
Computeranimation
Puffer <Netzplantechnik>
Pufferspeicher
Knotenmenge
Fahne <Mathematik>
Fahne <Mathematik>
Mini-Disc
Zeiger <Informatik>
Datenstruktur
Speicher <Informatik>
LES
E-Mail
Betriebsmittelverwaltung
Gerade
Dicke
Extremwert
Validität
Einfache Genauigkeit
p-Block
Zeiger <Informatik>
Einfache Genauigkeit
Mapping <Computergraphik>
Tupel
Skalarprodukt
Datenstruktur
Flächeninhalt
Zahlenbereich
Festspeicher
Makrobefehl
Attributierte Grammatik
Speicherverwaltung
Mini-Disc
Bitrate
Verzeichnisdienst
Speicherverwaltung
Punkt
Selbstrepräsentation
Schreiben <Datenverarbeitung>
Betrag <Mathematik>
Dicke
E-Mail
Kombinatorische Gruppentheorie
Code
Computeranimation
Homepage
Loop
Mailing-Liste
Fahne <Mathematik>
Reelle Zahl
Code
Mini-Disc
Trennschärfe <Statistik>
Bildschirmfenster
Flächeninhalt
Abstand
Datenstruktur
Zeiger <Informatik>
LES
E-Mail
Dienstgüte
Mobiles Endgerät
Gerade
Implementierung
Tabelle <Informatik>
Konstruktor <Informatik>
Ausnahmebehandlung
Variable
Softwarewartung
Tupel
Flächeninhalt
Menge
Rechter Winkel
Zahlenbereich
Festspeicher
Dreiecksfreier Graph
Makrobefehl
Programmierstil
Attributierte Grammatik
Information
Bitrate
Makrobefehl
Tabelle <Informatik>
Fitnessfunktion
Bit
Punkt
Regulärer Ausdruck
Zellularer Automat
Schreiben <Datenverarbeitung>
Patch <Software>
E-Mail
Zählen
Kontextbezogenes System
Code
Computeranimation
Loop
Deskriptive Statistik
Softwaretest
Virtual Home Environment
Code
Front-End <Software>
Lineare Regression
Mustersprache
Speicherabzug
Konditionszahl
Mixed Reality
Elektronischer Programmführer
FAQ
Hacker
E-Mail
Hacker
Gerade
Inklusion <Mathematik>
Softwaretest
Lineares Funktional
Lineare Regression
Elektronischer Programmführer
p-Block
Kontextbezogenes System
Dateiformat
Ausgleichsrechnung
Gerade
Patch <Software>
Funktion <Mathematik>
COM
Loop
Konditionszahl
p-Block
Stapelverarbeitung
Bitrate
Standardabweichung
Gewicht <Mathematik>
Computeranimation

Metadaten

Formale Metadaten

Titel Hacking PostgreSQL
Alternativer Titel Hacking on PostgreSQL
Serientitel PGCon 2013
Anzahl der Teile 25
Autor Frost, Stephen
Mitwirkende Heroku (Sponsor)
Lizenz CC-Namensnennung - keine kommerzielle Nutzung - Weitergabe unter gleichen Bedingungen 3.0 Unported:
Sie dürfen das Werk bzw. den Inhalt zu jedem legalen und nicht-kommerziellen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen und das Werk bzw. diesen Inhalt auch in veränderter Form nur unter den Bedingungen dieser Lizenz weitergeben
DOI 10.5446/19047
Herausgeber PGCon - PostgreSQL Conference for Users and Developers, Andrea Ross
Erscheinungsjahr 2013
Sprache Englisch
Produktionsort Ottawa, Canada

Inhaltliche Metadaten

Fachgebiet Informatik
Abstract We'll cover how to write your first patch to PG, submit it for review, and profit! Ever wished PostgreSQL had a particular capability or feature? Know a bit of C? This talk will walk you through writing a patch for PG, what needs to be modified to add an option to an existing command (grammar, execution, etc) and the major components of PG (parser, commands, memory management, etc). We'll also cover the PG style guidelines, a crash-course on using git, how to submit your patch, and the review process.

Ähnliche Filme

Loading...